本帖最后由 依然 于 2013-12-2 00:59 编辑
大概知道你的问题了,当你从0->length()的顺序时,你每次的remove()操作都会改变数组的顺序和内容。
比如数组的内容是 list = {11,22,33,44,55,66};
for(int i=0;i<list.size();i++)
{
if(list.get(i)<60)
list.remove(i);
}
当你执行第一次循环内容时候,list[0]=11 < 60;
所以执行 list.remove(),结果为 list={22,33,44,55,66}
第二次循环:
list[1]=33 < 60,满足if条件,执行list.remove()
结果为list={22,44,55,66}
第三次循环:
list[2]=55 < 60 ,满足条件,执行list.remove()
结果为list={22,44,66}
而你使用另一个方法:
for(int i=list.size()-1;i>=0;i--)
{
if(list.get(i)<60)
list.remove(i);
}
这个方法是从后面开始减少,不影响前面内容的角标顺序,所以每个元素都可以遍历的到;
对于集合的遍历与修改可以用实现ListIterator来完成(list.listIterator())。
|