如何在迭代时使用for-each循环修改集合而没有 ConcurrentModificationException?

如果我在使用 for-each 循环迭代集合时修改它,它会给出 .有什么解决方法吗?ConcurrentModificationException


答案 1

使用迭代器#remove

这是在迭代期间修改集合的唯一安全方法。有关详细信息,请参阅集合接口教程。

如果还需要在迭代时添加元素的功能,请使用 ListIterator


答案 2

一个解决方法是保存更改并在循环后添加/删除它们。

例如:

List<Item> toRemove = new LinkedList<Item>();

for(Item it:items){
    if(remove){
        toRemove.add(it);
    }
}
items.removeAll(toRemove);