抛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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值