Java中ConcurrentModificationException異常

遇到的問題

在我們用迭代器遍歷List, Set類型的集合過程中,若我們用List, Set類的add, remove方法修改其中的元素,可以通過編譯,但在運行時會拋出ConcurrentModificationException異常。
同樣地,在增強for循環(for each)中調用List, Set類的add, remove方法也會遇到同樣的問題。這是因爲增強for循環實際上也是通過迭代器實現的。

解決方法
  1. 對於List類型的遍歷,我們可以使用普通for循環,使用循環變量配合get方法遍歷,從而避免迭代器Iterator的使用。
  2. 我們也可以使用迭代器Iteratorremove方法,而非集合remove方法。
    while (iter.hasNext()) {
        if (iter.next().equals("Example")) {
            iter.remove();
        }
    }

 


Upd

Java集合類型繼承關係
Figure cited from https://www.jianshu.com/p/25aa92f8d681

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章