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的操作出错。