出现List集合并发修改异常的原因:
源码中的 expectedModCount 和 modCount 不相等导致的
final void checkForComodification() {
if (modCount != expectedModCount)
throw new ConcurrentModificationException();
}
expectedModCount 和 ModCount 是什么?
modCount代表了集合在结构上的修改次数
expectedModCount是在ArrayList调用迭代方法iteroter()时,会创建内部类Itr的对象,而其中的成员变量是 expectedModCount 在创建时会将 modCount 的值赋给 expectedModCount
为什么 expectedModCount 和 modCount 的值会不相等?
modCount会在创建ArrayList对象时赋值为0,每经过ArrayList的添加或者删除元素操作时会对modCount进行修改
expectedModCount则是在创建迭代器时会将当时的modCount的值赋给expectedModCount,那么之后若modCount发生了变化,则就会判断为不相等继而抛出并发修改异常



