在这个示例中,使用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()
。 - Michael Berry