如题所示,我们在java开发中,可能会有这样的一种情况,一个集合使用完了,我们想删除里面所有的元素,可能会遍历他们,然后依次调用删除操作。最简单的我们使用forEach遍历。
示例如下:
public class ListForEachDel {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("name");
list.add("id");
System.out.println(list);
list.forEach((item) -> {
// todo
list.remove(item);
});
System.out.println(list);
}
}
运行直接报错:
[name, id]
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList.forEach(ArrayList.java:1262)
at com.xxx.coll.ListForEachDel.main(ListForEachDel.java:22)
这个问题,我们根据错误堆栈信息,点进源码,发现forEach这里会有一个modCount与expectedModCount相等的判断: