Java集 - 删除所有

时间:2016-03-04 23:45:16

标签: java set

我有一个接受字符串数组的方法。我的问题是 输出:从打印行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;
}

感谢

1 个答案:

答案 0 :(得分:1)

问题在于以下行:

Collections.sort

基本上,我们将值放在地图中,但是,我们仍然有引用(即mapOfPermissions.put(current,setOfArray);),因此,当我们setOfArray元素使用该引用时,地图中的值得到改变。解决方案是改为使用以下行:

add/remove

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