并发修改异常
个人理解:
ArrayList 集合继承自:AbstractList
在AbstractList中定义了一个 modCount 变量,用于记录在集合使用过程中对集合增删操作的次数(修改了集合长度的操作的次数)
ArrayList作为实现类自然也就继承了这个变量,并初始化为0
当ArrayList创建了Iterator对象时,会生成两个变量:cursor、expectedModCount
expectedModCount变量在创建时就被赋值为了modCount,当对集合做了修改后,迭代元素的过程中会继续检查两个变量的值是否相同,如果不同就会抛出并发修改异常。
public E next() { checkForComodification(); //next()第一行就会调用方法,如果不相等就会抛出 并发修改异常 int i = cursor; if (i >= size) throw new NoSuchElementException(); Object[] elementData = ArrayList.this.elementData; if (i >= elementData.length) throw new ConcurrentModificationException(); cursor = i + 1; return (E) elementData[lastRet = i]; } final void checkForComodification() { if (modCount != expectedModCount) throw new ConcurrentModificationException(); }