先上图:
增强for和Iterator迭代 ArrayList时,用ArrayList的remove方法会报异常,java.util.ConcurrentModificationException
原因是:
modCount是ArrayList的一个属性,继承自抽象类AbstractList,用于表示ArrayList对象被修改次数。整个ArrayList中修改modCount的方法比较多,有add、remove、clear、ensureCapacityInternal等,凡是设计到ArrayList对象修改的都会自增modCount属性。
modCount != expectedModCount,对象被修改的次数变了,抛异常。为了阻止程序员在不允许修改的时候修改对象,起到保护作用,避免出现未知异常。即不能在迭代的时候修改(添加删除),可以用iterator.remove()
;
具体查看大佬博客
java.util.ConcurrentModificationException 异常问题详解
灰常详细,清晰!