Während der Projektentwicklung müssen wir möglicherweise häufig einige Elemente in der ArrayList dynamisch löschen.
Ein falscher Weg:
<pre name="code" class="java">for(int i = 0 , len= list.size();i<len;++i){ if(list.get(i)==XXX){ list.remove(i); } }
Die obige Methode löst die folgende Ausnahme aus:
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3 at java.util.ArrayList.RangeCheck(Unknown Source) at java.util.ArrayList.get(Unknown Source) at ListDemo.main(ListDemo.java:20)
Weil Wenn Sie das Element gelöscht, aber den Iterationsindex nicht geändert haben, wird eine Ausnahme ausgelöst, wenn die Iteration den letzten erreicht.
Das obige Programm kann wie folgt verbessert werden:
for(int i = 0 , len= list.size();i<len;++i){ if(list.get(i)==XXX){ list.remove(i); --len;//减少一个 } }
Der obige Code ist korrekt.
Lassen Sie uns unten eine weitere Lösung vorstellen:
Die List-Schnittstelle implementiert die Iterator-Schnittstelle intern und stellt Entwicklern einen iterator() zur Verfügung, um ein Iteratorobjekt des aktuellen Listenobjekts abzurufen.
Iterator<String> sListIterator = list.iterator(); while(sListIterator.hasNext()){ String e = sListIterator.next(); if(e.equals("3")){ sListIterator.remove(); } }
Das oben Gesagte ist auch richtig und die zweite Option wird empfohlen.
Die Implementierungsprinzipien der beiden Lösungen sind recht unterschiedlich. Die zweite Lösung wird nur von jdk gekapselt.
Wenn Sie sich den ArrayList-Quellcode ansehen, werden Sie feststellen, dass viele Methoden intern basierend auf der Iteratorschnittstelle implementiert sind. Daher wird empfohlen, die zweite Lösung zu verwenden.
Das Obige ist die gesamte Methode zum Löschen bestimmter Elemente in der Arraylist-Schleife der Java-Sammlungsklasse, die Ihnen vom Editor bereitgestellt wurde. Ich hoffe, dass jeder die chinesische PHP-Website unterstützt ~
Mehr Java-Sammlungsklasse arraylist Weitere Artikel zum Löschen bestimmter Elemente in einer Schleife finden Sie auf der chinesischen PHP-Website!