前言:
眼前姐妹们对“迭代器remove”大致比较关怀,小伙伴们都想要学习一些“迭代器remove”的相关资讯。那么小编同时在网络上收集了一些对于“迭代器remove””的相关资讯,希望姐妹们能喜欢,你们快快来了解一下吧!答案是肯定的!
我们查看JDK1.8迭代器Itr(继承自Iterator) 的remove()源码发现:
底层的remove()方法还是调用了ArrayList的remove()方法;
ArrayList.this.remove(lastRet);//这里是在内部类“ Itr ”内访问外部类ArrayList的实例
不同的是:
ArrayList.remove()方法没有更新预期修改集合元素结构的次数“expectModCount”
Itr.remove() 方法同时更新了修改次数”modCount“和预期修改次数“expectModCount”,所以再通过checkForComodification()
方法比较”modCount“和“expectModCount”时是相等的,不会发生fail-fast型的ConcurrentModificationException异常。
但是:
有人说foreach循环是一个语法糖,底层还是用了迭代器。没错,之所以foreach会报错本质原因就是更新了修改次数”modCount“,没有更新预期修改次数“expectModCount”,导致在迭代到next()元素时会被checkForComodification()方法及时检测到并抛出了ConcurrentModificationException异常。
所以如果删除元素不调用next()方法,并及时的break;那么可以成功删除,但这并不是安全的操作!
喜欢的朋友通过关注点赞转发评论支持下,让小编更有动力分享哦!
近期导读:
SQL调优思路
synchronized与Lock的区别从此不会被遗忘
synchronized用法总结
OSI网络七层模型很难记忆吗?不存在的
两步实现Java自定义注解
标签: #迭代器remove