Java 套-全部删除

Java sets- remove all

我有一个接受字符串数组的方法。我的问题是 输出:从行打印 setOfArray 我得到以下 array

的正确输出
(buy,pay,sell): [sell, pay] [sell]
[] [buy, sell] [buy] [buy, pay]

但是这不会转换为 mapOfPermissions

我的输出是:

{buy:pay:sell:=[buy, sell, pay],
pay:=[buy, sell, pay], pay:sell:=[buy, sell, pay], buy:=[buy, sell,
pay] . . . . }

有什么办法可以解决这个问题吗?

public Map build (String[] array){   
    setOfArray = new HashSet<String>();

    for (String a : array ){
        setOfArray.add(a);
    }

    Arrays.sort(array);
    int n = array.length; 
    String current = "";

    int i = 0;

    while ( i<n) {  

        for (int j = i ; j<n ; j++){    

            current = current + (array[j] + ":");   
            woSeed = new HashSet<String>();
            StringTokenizer stringtokenizer = new StringTokenizer(current, ":");
            while (stringtokenizer.hasMoreElements()) {

                woSeed.add(stringtokenizer.nextToken());

            }

            setOfArray.removeAll(woSeed);

            System.out.println(setOfArray);
            mapOfPermissions.put(current,setOfArray);

            for (String a : array ){

                setOfArray.add(a);
            }       
        }   
        current = "";
        i++;            
    }
    return mapOfPermissions;
}

谢谢

问题出在下面一行:

mapOfPermissions.put(current,setOfArray);

基本上,我们将值放在地图中,但是,我们仍然有引用(即 setOfArray),因此,当我们 add/remove 使用该引用的元素时,值在地图被改变。解决方案是改用以下行:

mapOfPermissions.put(current,new HashSet<String>(setOfArray));

这会将集合的副本放入映射中,因此,对该集合的进一步更改不会影响映射值。