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 對象加鎖。
歡迎評論點贊!您的支持是我創作的動力!
微信搜索“程序員轉管理”關注獲取更多優質文章