public static void main(String[] args) {
ArrayList<Integer>a = new ArrayList<>();
a.add(-1);
a.add(-1);
a.add(2);
a.add(-1);
a.add(-1);
for (int j = 0; j < a.size(); j++) {
if (a.get(j) <= 0) {
a.remove(j);
}
}
for (int i = 0 ; i < a.size();i++){
System.out.println(a.get(i));
}
}
最后的结果是
-1
2
-1
我想要的结果是只有一个2
为什么会出现这种错误呢?
标签:
改成从大到小循环
for (int j =a.size()-1; j >=0; j--) {
if (a.get(j) <= 0) {
a.remove(j);
}
}
第一个for循环中,每次remove后,arrayList的size都会减一,前面被移除元素后,整体会向前面移动一个位置
第一次循环j=0,删除第一个-1,arraylist的size为4,然后第二个-1跑到index=0的位置,2跑到index=1的位置上....;
第二次循环j=1,arrayList.get(1)是2,所以不会移除
第三次循环j=2,arrayList的size为4,arrayList.get(2)=-1,又会移除2后面的-1,size变为3
第四次循环j=3,j不小于size,不再进行循环,所以最后一个-1,不会遍历到
删除元素不能用remove方法,建议用迭代器
可以直接拉姆达表达式来筛选,a.where(c=>c>0)