foreach循環進行元素的remove移除add添加操作拋異常Exception in thread java.util.ConcurrentModificationException

JAVA ArrayList for循環進行元素的remove移除/add添加操作拋異常Exception in thread “x” java.util.ConcurrentModificationException

Exception in thread "main" java.util.ConcurrentModificationException
	at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909)
	at java.util.ArrayList$Itr.next(ArrayList.java:859)

這個異常一般是由JAVA的快速失敗機制(fail-fast)拋出來的,在foreach循環裏進行元素的remove或者add都有可能跑出該異常,舉個例子:

List<String> list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
for (String item : list) {
    list.remove(item);
    }

或者是這樣的代碼:

List<Integer> list = new Arraylist<>();
list.add(1);
list.add(2);
list.add(3);
for(int i = 0;i<list.size();i++){
   list.add(i);  
}

上面兩段代碼都會跑出ConcurrentModificationException異常,但是我想通過遍歷判斷移除某個元素怎麼辦呢?

解決方案:

可以使用Iterator 方式:

List<String> list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()){
     String item = iterator.next();
     if ("a".equals(item)){
        iterator.remove();
        }
     }

如果併發操作,記得對 Iterator 對象加鎖。

歡迎評論點贊!您的支持是我創作的動力!

微信搜索“程序員轉管理”關注獲取更多優質文章

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