0%

java.util.concurrentmodificationexception异常原因和解决方法

原因

简单地说下原因,在我那个项目的代码中,遍历的方式是增强 for 循环,在底层使用的也是迭代器。

也就是说,是用Itr去遍历的,这个Itr是ArrayList实现的一个遍历接口、内部类。

但是我在删除的时候是通过ArrayList的remove方法去操作的,不是Itr内部的那个删除方法去操作的。

那么问题就来了:

ArrayList的remove方法修改的变量是继承自AbstractList的变量modCount;而Itr的remove方法修改的是自身的变量expectedModCount。这两个变量的作用都是记录修改次数的。

所以,在用ArrayList的remove方法进行删除操作以后,Itr里面的expectedModCount会与ArrayList的modCount进行比较,二者不相等,所以会抛错。

img

解决

解决的方法是改成索引遍历,但是需要在删除之后保证索引的正常: