Heim >Java >javaLernprogramm >Wie entferne ich Elemente sicher aus einer Sammlung, während ich in Java iteriere?

Wie entferne ich Elemente sicher aus einer Sammlung, während ich in Java iteriere?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-13 09:10:19876Durchsuche

How to Safely Remove Elements from a Collection While Iterating in Java?

Elemente aus Sammlungen während der Iteration entfernen

Beim Arbeiten mit Sammlungen ist es notwendig, Elemente während der Iteration zu ändern oder zu entfernen. Das Ändern einer Sammlung während der Iteration kann jedoch zu einer ConcurrentModificationException führen. Um dies zu vermeiden, gibt es mehrere Ansätze:

Iterieren über eine Kopie der Sammlung

Ein Ansatz besteht darin, vor dem Iterieren eine Kopie der Sammlung zu erstellen. Dadurch können Sie die Kopie ändern, ohne dass sich dies auf die Originalsammlung auswirkt. Hier ist ein Beispiel:

List<Foo> fooListCopy = new ArrayList<>(fooList);
for (Foo foo : fooListCopy) {
    // Modify actual fooList
}

Verwendung des Iterators der tatsächlichen Sammlung

Ein alternativer Ansatz besteht darin, den Iterator der tatsächlichen Sammlung zu verwenden. Mit diesem Ansatz können Sie die Sammlung während der Iteration ändern. Hier ist ein Beispiel:

Iterator<Foo> itr = fooList.iterator();
while (itr.hasNext()) {
    // Modify actual fooList using itr.remove()
}

Überlegungen zur Auswahl eines Ansatzes

Die Wahl zwischen diesen Ansätzen hängt von mehreren Faktoren ab:

  • Sammlungstyp: Der erste Ansatz funktioniert mit jeder Sammlung, während der zweite Ansatz nur mit Sammlungen funktioniert, die diese unterstützen Iteratoren (z. B. Listen, Mengen).
  • Lesbarkeit: Der erste Ansatz ist möglicherweise einfacher zu lesen und zu verstehen, insbesondere für Anfänger.
  • Leistung:Der zweite Ansatz ist effizienter, da keine Kopie der Sammlung erstellt werden muss.
  • Nicht unterstütztes Entfernen Operation: Die Methode Iterator.remove() ist optional, daher unterstützen nicht alle Iteratoren das Entfernen von Elementen. Der erste Ansatz vermeidet dieses Problem, indem stattdessen die Methode Collection.removeAll() verwendet wird.

Zusätzliche Techniken zum Entfernen von Elementen

Zusätzlich zu diesen Ansätzen Java 8 bietet mehrere andere Techniken zum Entfernen von Elementen während der Iteration, darunter:

  • Stream-basiert Entfernen:Verwenden von Stream-Operationen wie RemoveIf() oder Filter() mit Collect().
  • ListIterator:Verwenden von ListIterator.next() zum Iterieren und ListIterator.remove() zum Elemente entfernen.
  • Unterliste oder Teilmenge: Wenn die Sammlung sortiert ist, wird das Erstellen einer Unterliste oder Durch das Löschen einer Teilmenge können aufeinanderfolgende Elemente effizient entfernt werden.

Das obige ist der detaillierte Inhalt vonWie entferne ich Elemente sicher aus einer Sammlung, während ich in Java iteriere?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn