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 对象加锁。
欢迎评论点赞!您的支持是我创作的动力!
微信搜索“程序员转管理”关注获取更多优质文章