【发布时间】:2019-12-16 15:10:03
【问题描述】:
在本例中使用list.remove((Object)93) 会导致ConcurrentModificationException:
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(14);
list.add(2);
list.add(44);
list.add(41);
list.add(93);
list.add(20);
for(Iterator<Integer> it = list.iterator();it.hasNext();) {
list.remove((Object)93);
it.next();
}
System.out.println(list);
但是,当我将 list.remove((Object)93) 包装在 if 语句中时,它不会导致任何错误。为什么?
for(Iterator<Integer> it = list.iterator();it.hasNext();) {
int num = it.next();
if(num == 93) {
list.remove((Object)93);
}
}
System.out.println(list);
【问题讨论】:
-
我不相信这是重复的,至少不是链接问题。这个问题特别讨论了在迭代列表时使用
list.remove()删除项目,而不是it.remove()。