首页 新闻 会员 周边

Arraylist数据删除不干净

0
[已解决问题] 解决于 2020-12-02 12:03

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
为什么会出现这种错误呢?

忘记她的主页 忘记她 | 菜鸟二级 | 园豆:224
提问于:2020-11-28 15:35
< >
分享
最佳答案
1

第一个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,不会遍历到

奖励园豆:5
寻觅beyond | 小虾三级 |园豆:923 | 2020-11-28 16:18
其他回答(3)
0

删除元素不能用remove方法,建议用迭代器

陈皮的JavaLib | 园豆:202 (菜鸟二级) | 2020-11-28 22:32
0

改成从大到小循环
for (int j =a.size()-1; j >=0; j--) {
if (a.get(j) <= 0) {
a.remove(j);
}
}

jqw2009 | 园豆:2439 (老鸟四级) | 2020-11-29 13:14
0

可以直接拉姆达表达式来筛选,a.where(c=>c>0)

华临天下 | 园豆:1501 (小虾三级) | 2020-11-30 11:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册