我是一个使用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();
答案 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,就像在这个线程中讨论的那样