遍历ArrayList容易碰到的问题!


今天无意之中在程序中需求遍历一个ArrayList集合,结果一直都发现好像有问题,调试了一下,发现程序并没有按照条件来进行移除操作,到网上搜了下,才发现遍历ArrayList是要注意一个小问题的,问题大概如下:

 

问题发生的原因分析:
被遗漏的并不是原list的0号item,而是1号item
为什么呢?因为当你remove第i个item时,第 [i + 1, count)域中所有items的索引值皆减一(array是连续的,要满足只要有k ∈ [0, count)则array[k]必存在),那么当你在循环下一轮用i + 1为索引访问的即是原先list中索引为i + 2的那个item,由此可知,上例中0号被删除时,原1号变为新0 号,原2号变为新1号。。。下一轮访问的1号就是先前的2号,而原始的1号则永远没有被访问到

明白了这个自然可以得出正确的迭代方法,正序时需注意索引和可能变化的终止条件,倒序时则简单些。
说白了就是因为removeat方法会改变count方法的返回值,就造成了不是每个元素都被遍历到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值