遇到的问题
在我们用迭代器遍历List
, Set
类型的集合过程中,若我们用List
, Set
类的add
, remove
方法修改其中的元素,可以通过编译,但在运行时会抛出ConcurrentModificationException
异常。
同样地,在增强for循环(for each)中调用List
, Set
类的add
, remove
方法也会遇到同样的问题。这是因为增强for循环实际上也是通过迭代器实现的。
解决方法
- 对于
List
类型的遍历,我们可以使用普通for循环,使用循环变量配合get
方法遍历,从而避免迭代器Iterator
的使用。 - 我们也可以使用迭代器
Iterator
的remove
方法,而非集合的remove
方法。
while (iter.hasNext()) {
if (iter.next().equals("Example")) {
iter.remove();
}
}
Upd
Figure cited from https://www.jianshu.com/p/25aa92f8d681