遇到的問題
在我們用迭代器遍歷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