为什么不从我的ArrayList <integer>中删除所有元素?

时间:2016-04-14 03:45:08

标签: java arraylist

我是一个使用Android Studio学习Android编程的新手,我遇到了问题。我尝试删除此列表中的所有元素,但最后,它说大小为5.为什么?

这是我的代码:

ArrayList<Integer> arr = new ArrayList<Integer>(10);
for(int i=1;i<=10;i++){
    arr.add(i);
}

for(int i=0;i<arr.size();i++) {
    arr.remove(i);
}

Toast.makeText(getApplicationContext(),
    arr.size()+" ",
    Toast.LENGTH_LONG).show();

3 个答案:

答案 0 :(得分:1)

哦,你知道为什么吗?

因为当i ++它变得更大了吗?但每次你删除arraylist的长度改变。它会变小

i
0 1 2 3 4 5
arraylist size
9 8 7 6 5 4

因此它只删除其中的5个10-5 = 5,最后列表大小为5

答案 1 :(得分:1)

删除循环将仅执行5次,因为在每次循环迭代时评估条件echo WC_Shortcodes::product_page( array( 'id' => 1) ); i < arr.size()每次都变小。因此arr.size()变大,i变得更小,并且它们会在中间相遇。

要修复它,请向后迭代:

arr.size()

或将其更改为:

for (int i = arr.size(); --i >= 0;) {
    arr.remove(i);
}

或者,更有效率,删除循环并改为调用arr.clear();

请注意,令人困惑的是,使用while (arr.size() > 0) { arr.remove(0); } 调用remove会删除该位置的元素,而使用int调用add则会添加作为int。如果您要删除,请致电remove((Integer)i);

答案 2 :(得分:0)

许多新手开发者常犯这个错误。我过去也做过。以下答案解释了原因。按大小循环遍历数组并删除循环内的项目是危险的。 array.clear()是最简单的一个,但是如果你需要在删除之前对每个元素进行额外的工作,你可以使用Iterators,就像在这个线程中讨论的那样

Calling remove in foreach loop in Java