为什么ArrayList在使用迭代器迭代元素时不能使用List.remove()删元素,而是使用Iterator.remove()删元素

其实,我相信有一定经验的都已经知道了,把标题的“为什么”去掉读一遍,但是具体是为什么?今天本人跟进源码(jdk7)探了个究竟。注:这篇文章只介绍使用list.remove()抛出ConcurrentModificationException的原因,其它参数及异常不作介绍。

直入主题,首先我们来看下面这段出问题的代码


下面是运行结果


使用iterator.remove()是没有问题的,此处就不粘图了

由运行结果可知,抛异常的地方出现在iterator.next(),而且已经遍历完了“bvBody”,当尝试获取“cvBody”时抛了异常。根据异常第一行可知问题出在ArrayList的内部类Itr(也就是代码中的iterator)的checkForComodification()方法,下面是源码


简单明了,当modCount != expectdModCount时,抛出并发修改异常(记住这个点

  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值