不要在foreach循环里进行元素的remove/add操作(个人理解)

如下代码:


编译器编译后的代码如下:

}

首先大家应该了解,对集合做remove,and等操作会触修改次数(modCount)的增加。


以下是集合实现的Iterator.hasNext()方法


cursor:下一个元素的索引位置(调用Interator.next()是会触发cursor+1)

size:集合长度

总结:如果我们我们用foreach删除的元素刚好是最后一个,删除完成前cursor刚好等于size的大小。但是,删除完成后size的数量减1,但是cursor并没有变化。导致下一次循环不相等继续向下执行,导致检查数组不通过,抛出java.util.ConcurrentModificationException

为什么使用下面的方法就不会出现这种情况:


请看箭头所指处:

foreach是直接调用集合的删除方法,而上面是调用iterator的删除方法:


相信大家一看便知!

1.首先检查集合

2.删除元素

3.cursor重新赋值

4.检查集合参数重新赋值


个人记录!只是个人理解,欢迎各位大神吐槽纠错,小弟在此谢过

  • 18
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值