抛ConcurrentModificationException原因以及解决方案

final void checkForComodification() {

if (modCount != expectedModCount)

throw new ConcurrentModificationException();

}

即当modCount != expectedModCount时,执行next()就会抛出ConcurrentModificationException

而什么时候会造成modCount != expectedModCount呢?

ArrayList.add()方法,每执行一次都会modCount++(当然删除就是modCount--),但不改变expectedModCount的值。expectedModCount的值是在构建迭代的时候初始为expectedModCount=modCount的。

这就是楼主说的在构建迭代器之后,再使用ArrayList.add()方法就造成了modCount != expectedModCount

所以构建迭代器后,用迭代器来add和remove就没有问题。因为它会在改变modCount的值之后,又把值赋给了expectedModCount,从而保证modCount=expectedModCount

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容