错误方式
不能使用for循环,若是使用的话,出现的情况
public void wrongRemove(){
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("B");
list.add("c");
list.add("d");
for (String s : list) {
list.remove("c");
System.out.println(s);
}
}
结果将会抛出异常:ConcurrentModificationException
原因:Java 一般不允许一个线程在遍历 Collection 时另一个线程修改它。
正确方式
使用iterator()边遍历边修改 Collection 的唯一正确方式是使用 Iterator.remove() 方法,如下:
public void test(){
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("B");
list.add("c");
list.add("d");
Iterator<String> it = list.iterator();
while(it.hasNext()){
String next = it.next();
if(next.equals("d")) {
it.remove();
continue;
}
System.out.println(next);
}
}
本文探讨了在Java中遍历ArrayList并尝试修改集合时遇到的并发修改异常问题。错误示例展示了在for-each循环中删除元素导致的异常。为了解决这个问题,文章介绍了正确的方法,即使用Iterator的remove()方法来安全地在遍历过程中删除元素。通过这种方式,可以确保集合遍历和修改的同步,避免程序出错。
2661

被折叠的 条评论
为什么被折叠?



