1. 程式人生 > >Java 集合remove()刪除時發生異常:ConcurrentModificationException

Java 集合remove()刪除時發生異常:ConcurrentModificationException

原因:首先在next()方法中會呼叫checkForComodification()方法,然後根據cursor的值獲取到元素,接著將cursor的值賦給lastRet,並對cursor的值進行加1操作。初始時,cursor為0,lastRet為-1,那麼呼叫一次之後,cursor的值為1,lastRet的值為0。注意此時,modCount為0,expectedModCount也為0。

final void checkForComodification() {
    if (modCount != expectedModCount)
    throw new ConcurrentModificationException();
}

     如果modCount不等於expectedModCount,則丟擲ConcurrentModificationException異常。

  很顯然,此時modCount為1,而expectedModCount為0,因此程式就丟擲了ConcurrentModificationException異常。

關鍵點就在於:呼叫list.remove()方法導致modCount和expectedModCount的值不一致。

解決:在迴圈中必須加入break