ListItertor为什么先增add再删remove就会报IllegalStateException异常?

博客探讨了ArrayList迭代器中lastRet的设计逻辑。在执行add或remove操作后,lastRet的值变化以反映迭代器状态的改变,防止并发修改异常。这种设计是为了确保线程安全,避免在多线程环境下,一个线程修改ArrayList时,其他线程进行set或remove操作可能导致的错误。同时,文章指出ArrayList本身不是线程安全的,因此这样的设计对于防止并发问题至关重要。
摘要由CSDN通过智能技术生成

add方法初始化了lastRet

执行set()方法不会改变lastRet的值,而执行remove()后,lastRet的值从3变为2,执行add()后,lastRet的值从2变成3.为什么会这样设计呢?

因为执行add,remove操作后,当前index的值就改变了,上一个下标值也改变了,并且之后元素所有下标的值都会发生改变,所以再进行set(),remove() 操作可能会误修改和误删,所以add,remove操作后,直接将lastRet值设为-1,就是提示迭代器状态已经发生改变,进行set()和remove() 操作会不准确。
因为ArrayList线程是不安全的,所以在线程对ArrayList进行add()和remove()操作后,将lastRet值设为-1可以避免另外一个线程对ArrayList的操作出错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值