In der Projektentwicklung müssen wir möglicherweise einige Elemente in der ArrayList dynamisch dynamisch löschen.
Ein falscher Weg:
<pre name = "code"> for (int i = 0, len = list.size (); i <len; ++ i) {if (list.get (i) == xxx) {list.remove (i); }}Die obige Methode wirft die folgende Ausnahme aus:
Ausnahme im Thread "Haupt" java.lang.indexoutofBoundSexception: Index: 3, Größe: 3 bei java.util.arrayList.rangecheck (unbekannte Quelle) unter java.util.arraylist.get (unbekannte Quelle) unter Listemo.main (Listemo.java:20))
Weil Sie das Element gelöscht haben, aber das Iterations -Index nicht geändert haben, so dass die Iteration das letzte Mal erreicht hat, wird eine Ausnahme ausgelöst.
Das obige Programm kann wie folgt verbessert werden:
für (int i = 0, len = list.size (); i <len; ++ i) {if (list.get (i) == xxx) {list.remove (i); -len; // reduzieren}}Der obige Code ist korrekt.
Lassen Sie uns eine andere Lösung vorstellen:
Die List -Schnittstelle implementiert die Iterator -Schnittstelle intern und bietet dem Entwickler einen Iterator (), um ein Iteratorobjekt des aktuellen Listenobjekts zu erhalten.
Iterator <String> SLISTIREDRATOR = LIST.IRTERATOR (); while (Slistiterator.hasNext ()) {String e = Slistiterator.Next (); if (e.equals ("3")) {SLISTIERTERATOR.REMOVE (); }}Das obige ist ebenfalls korrekt und die zweite Lösung wird empfohlen.
Die Implementierungsprinzipien der beiden Lösungen sind ähnlich und die zweite wird gerade von JDK eingekapselt.
Wenn Sie den ArrayList -Quellcode anzeigen, werden Sie feststellen, dass viele Methoden intern auf der Grundlage der Iteratorschnittstelle implementiert werden, sodass die zweite Lösung empfohlen wird.
Das obige ist der gesamte Inhalt der Methode, um bestimmte Elemente in der Java Collection ArrayList -Schleife zu löschen, die Ihnen mitgelegt wurde. Ich hoffe, jeder unterstützt Wulin.com ~