现在的位置: 首页 > 综合 > 正文

遍历ArrayList容易碰到的问题!

2013年10月07日 ⁄ 综合 ⁄ 共 1015字 ⁄ 字号 评论关闭

今天无意之中在程序中需求遍历一个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方法的返回值,就造成了不是每个元素都被遍历到。

抱歉!评论已关闭.