如果您查看Collection
实现的代码,请选择ArrayList
; 我们在modCount
中声明了一个变量AbstractList
:
protected transient int modCount = 0;
然后在每个修改方法(例如remove
)中ArrayList
我们有
public E remove(int index) {
rangeCheck(index);
modCount++;
//....
所以modCount
只会增加; 它永远不会递减。
然后Iterator
我们有:
final void checkForComodification() {
if (modCount != expectedModCount)
throw new ConcurrentModificationException();
}
创建时拍摄expectedModCount
的快照在哪里。modCount
Iterator
因此,如果在使用an 的同一个实例时对底层有任何修改,那么将抛出 a。List
Iterator
ConcurrentModificationException
我想有一个极端的情况,如果你进行了足够的修改,那么它int
会溢出并再次返回到它的原始值——然而,这将是一个相当大的数字或修改;准确地说是2 32 。