小编典典

为什么在ArrayList中出现ConcurrentModificationException?

java

为什么下面的代码抛出ConcurrentModificationException?JoshBloch可以避免ConcurrentModificationException。

ArrayList<Integer> list=new ArrayList<Integer>();
list.add(100);
list.add(200);
list.add(300);
list.add(400);
for(Integer field : list) {    
    list.remove(field);
    list.add(200);
}

阅读 261

收藏
2020-11-30

共1个答案

小编典典

使用“ for each”循环时,不能在列表上使用remove。相反,您可以使用此方法在迭代器上调用remove:

Iterator<Integer> iterator = list.iterator();
while(iterator.hasNext()) {
    Integer integer = iterator.next();

    // ...check if you want to remove this one...

    iterator.remove();
}

如果您实际上想用“ 200”代替每个值,或用其他值代替,则建立一个新列表可能更有意义:

List<Integer> newList = new ArrayList<Integer>();

Iterator<Integer> iterator = list.iterator();
while(iterator.hasNext()) {
    Integer integer = iterator.next();

    newList.add(integer);

    iterator.remove();
}
2020-11-30