为什么我有ConcurrentModificationException?我正在迭代一个集合的对象并在另一个集合中删除它们:
public static void printSubsets(Set<String> set){
if (set.isEmpty()) return;
printSet(set);
Set<String> copy = set;
for (String s: set){
copy.remove(s);
printSubsets(copy);
copy.add(s);
}
}
答案 0 :(得分:1)
不,您要从同一Set
删除它们,因为此处只有一个Set
对象。您有2个变量引用相同的Set
,set
和copy
。
set -----> Set object
copy ------^
通过任一变量都可以看到您所做的任何更改。您正在使用增强的for循环迭代Set
中的元素,因此ConcurrentModificationException
会产生结果。
为了防止这种情况,你可以制作一套(浅)副本。
Set<String> copy = new HashSet<String>(set);