2016-04-14 24 views
-1

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

这是我的代码:

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(); 

回答

1

哦,你知道为什么吗?

因为当我++时它会变大吗?但是每次删除ArrayList的长度都会改变。这将变得更小

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

因此它仅删除它们的五月10日至5日= 5到底列表大小为5

1

移除循环将只执行5次为i < arr.size()被评估的条件每次循环迭代,并且每次都会变得更小。所以i变得更大,arr.size()变小,他们在中间相遇。

要修复它,向后遍历:

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

或更改为:

while (arr.size() > 0) { 
    arr.remove(0); 
} 

或者,更有效地去除循环,并呼吁arr.clear();来代替。

注意混淆性,调用removeint在该位置移除元件,而调用addint被并称作为Integer。如果您想删除的值,请致电remove((Integer)i);

0

这是很多新手开发者犯的常见错误。我过去也是这样做的。下面的答案解释了原因。按大小循环数组并删除循环内的项是很危险的。该array.clear()是最简单的一个,但如果你需要将每一种元素额外的工作在删除之前,你可以在这个线程

Calling remove in foreach loop in Java

讨论使用迭代器