在用iterator遍历set元素时报错Exception in thread "main" java.util.ConcurrentModificationException
at java.base/java.util.HashMap$HashIterator.nextNode(HashMap.java:1584)
at java.base/java.util.HashMap$KeyIterator.next(HashMap.java:1607)
private static boolean dfs(int k, int[][] distance, HashSet<Integer> set, int n) {
if (set.size() == n) {
return true;
}
boolean isAdd=false;
Iterator<Integer> iterator = set.iterator();
for (int i = 0; i < n; i++) {
if (set.contains(i)) {
continue;
}
while (iterator.hasNext()){
int temp=iterator.next();
if (distance[i][temp] <= k) {
set.add(i);
isAdd=true;
break;
}
}
}
if (!isAdd) {
return false;
}
return dfs(k,distance,set,n);
}
Exception in thread "main" java.util.ConcurrentModificationException
at java.base/java.util.HashMap$HashIterator.nextNode(HashMap.java:1584)
at java.base/java.util.HashMap$KeyIterator.next(HashMap.java:1607)
查到很多说是一个while中不能用1次以上的next()方法,但我只用了一次也报错,而且明明是先用hasNext()方法判断过是否由下一个元素的,不知道原因,希望各位解答一下。
ConcurrentModificationException
迭代过程中,不能用集合自带的新增、删除接口。否则会报并发错误。
要用Iterator
就别使用原集合的增删操作,如果要在循环中使用原集合的增删操作,只能用for(int i=0;i<size;i++)
这种循环。