直接对ArrayList采用foreach方式遍历并查找删除元素会出现 java.util.ConcurrentModificationException异常;正序删除的方式会漏掉一个元素。
原因:ArrayList的remove底层源码有一个fastremove方法,会有一个modcount++ 的操作,然后再ArrayList内部迭代器中有一个checkForComodification操作,会去检查modCount是否改变,如果改变了就抛出并发修改异常。不管是for each还是使用变量的for循环,都是利用了ArrayList自身的Iterator迭代器,都会出现这样的错误。
注意查看源码!!!
应对措施:
1、使用Iterator自己的remove方法;
2、采用倒序删除的写法来改正这个错误。