面试题:java中ArrayList循环遍历并删除元素的陷阱
面试题:java中ArrayList循环遍历并删除元素的陷阱
fang_faye 发表于3个月前
面试题:java中ArrayList循环遍历并删除元素的陷阱
  • 发表于 3个月前
  • 阅读 2
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

直接对ArrayList采用foreach方式遍历并查找删除元素会出现 java.util.ConcurrentModificationException异常;正序删除的方式会漏掉一个元素。

原因:ArrayList的remove底层源码有一个fastremove方法,会有一个modcount++ 的操作,然后再ArrayList内部迭代器中有一个checkForComodification操作,会去检查modCount是否改变,如果改变了就抛出并发修改异常。不管是for each还是使用变量的for循环,都是利用了ArrayList自身的Iterator迭代器,都会出现这样的错误。

注意查看源码!!!

应对措施:

1、使用Iterator自己的remove方法;

2、采用倒序删除的写法来改正这个错误。

共有 人打赏支持
粉丝 3
博文 23
码字总数 8083
×
fang_faye
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: