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));
这会将集合的副本放入映射中,因此,对该集合的进一步更改不会影响映射值。
我有一个接受字符串数组的方法。我的问题是
输出:从行打印 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));
这会将集合的副本放入映射中,因此,对该集合的进一步更改不会影响映射值。