關於Collection的ConcurrentModificationException
在使用Java迭代器的時候,執行next()方法調用一個名爲checkForComodification()的方法,簡單看一下方法的具體實現代碼
final void checkForComodification() {
if (modCount != expectedModCount)
throw new ConcurrentModificationException();
}
modCount 表示collection中數據變更操作的次數
expectedModCount 期待的容器變更次數,操作迭代器的過程中期待的是不會出現併發操作,因此理想的條件是modCount == expectedModCount
在初始迭代器的時候從Collection中modCount拷貝到expectedModCount,在迭代器執行的時候,如果Collection中元素出現併發變更操作,就會導致expectedModCount與modCount不一致並在next()執行的時候拋出異常,從而避免了對容器的併發操作。