2016-04-14 4 views
-1

Ich bin ein Neuling Android-Programmierung mit Android Studio zu studieren, und ich habe ein Problem. Ich versuche, alle Elemente in dieser Liste zu entfernen, aber am Ende heißt es, die Größe ist 5. Warum?Warum werden nicht alle Elemente aus meiner ArrayList <Integer> entfernt?

Dies ist mein Code:

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

Antwort

1

Oh wissen Sie warum?

Weil wenn ich ++ es größer wird richtig? Aber jedes Mal, wenn Sie die Länge der Arraylist entfernen geändert. Es wird immer kleiner

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

daher nur abnehmen 5 von ihnen 10-5 = 5 am Ende der Liste Größe beträgt 5

1

Die Entfernungsschleife wird nur dann ausgeführt, 5-mal als Bedingung i < arr.size() ausgewertet auf Jede Schleifeniteration und arr.size() wird jedes Mal kleiner. So wird i wird größer, arr.size() wird kleiner, und sie treffen sich in der Mitte.

es zu beheben, iterieren rückwärts:

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

Oder ändern Sie ihn auf:

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

Oder effizienter, entfernen Sie die Schleife und rufen arr.clear(); statt.

anzumerken, dass zum Verwechseln, rief remove mit einem int an dieser Position das Element entfernt, während Aufruf add mit einem int fügt daß Wert als Integer. Wenn Sie den Wert entfernen möchten, rufen Sie remove((Integer)i);.

0

Es ist ein häufiger Fehler, der von vielen neuen Entwicklern gemacht wird. Ich habe es auch in der Vergangenheit gemacht. Diese Antworten erklären warum. Es ist gefährlich, Array für Größe durchzulaufen und Elemente in der Schleife zu entfernen. Die array.clear() ist die einfachste, aber wenn Sie auf jedes Element zusätzliche Arbeit machen müssen, bevor zu entfernen, könnten Sie Iteratoren verwenden, wie in diesem Thread

Calling remove in foreach loop in Java

diskutiert wurde
Verwandte Themen