如果我在使用 for-each 循环迭代集合时修改了集合,它会抛出 ConcurrentModificationException 异常。有没有什么解决方法?
一个解决方法是在循环之后保存你所做的更改,然后进行添加/删除操作。
例如:
List<Item> toRemove = new LinkedList<Item>();
for(Item it:items){
if(remove){
toRemove.add(it);
}
}
items.removeAll(toRemove);
ConcurrentLinkedQueue
,ConcurrentHashMap
等。如果您只想从集合中删除元素,则可以使用 Iterator 而不是 Iterable。
否则,您可以先复制列表而不是迭代原始集合。例如,如果您的集合是一个列表,则可以创建一个新的 ArrayList(originaList) 并遍历它。修改应该在原始列表上进行。
对于您的用例,另一种更好的替代方案是不使用 for-each,而是传统的 for- 循环。