我有一个接受字符串数组的方法。我的问题是
输出:从打印行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;
}
感谢
答案 0 :(得分:1)
问题在于以下行:
Collections.sort
基本上,我们将值放在地图中,但是,我们仍然有引用(即mapOfPermissions.put(current,setOfArray);
),因此,当我们setOfArray
元素使用该引用时,地图中的值得到改变。解决方案是改为使用以下行:
add/remove
这会将集合的副本放入地图中,因此该集合中的进一步更改不会影响地图值。