Heim > Java > javaLernprogramm > Wie kann ich Sammlungen beim Iterieren in Java sicher ändern?

Wie kann ich Sammlungen beim Iterieren in Java sicher ändern?

Patricia Arquette
Freigeben: 2024-12-09 22:45:15
Original
828 Leute haben es durchsucht

How Can I Safely Modify Collections While Iterating in Java?

Ändern von Sammlungen während der Iteration: Eine umfassende Anleitung

Um Sammlungen während der Iteration effektiv zu ändern und Fehler wie ConcurrentModificationException zu vermeiden, müssen mehrere Strategien berücksichtigt werden :

Sammeln und Entfernen

Diese Methode beinhaltet das Sammeln von Objekten, die während einer erweiterten for-Schleife entfernt werden sollen, und das anschließende Entfernen dieser Objekte nach Abschluss der Iteration. Diese Technik ist besonders nützlich in Szenarien, in denen das Löschen das Hauptziel ist:

List<Book> books = new ArrayList<>();
ISBN isbn = new ISBN("0-201-63361-2");
List<Book> found = new ArrayList<>();

for (Book book : books) {
    if (book.getIsbn().equals(isbn)) {
        found.add(book);
    }
}

books.removeAll(found);
Nach dem Login kopieren

Verwendung von ListIterator

ListIterator unterstützt sowohl das Entfernen als auch das Hinzufügen von Elementen während der Iteration. Dies macht es zu einer geeigneten Wahl beim Ändern von Listen:

List<Book> books = new ArrayList<>();
ISBN isbn = new ISBN("0-201-63361-2");
ListIterator<Book> iter = books.listIterator();

while (iter.hasNext()) {
    if (iter.next().getIsbn().equals(isbn)) {
        iter.remove();
    }
}
Nach dem Login kopieren

JDK >= 8

Java 8 führt zusätzliche Methoden zur Sammlungsänderung ein:

  • removeIf: Diese Methode entfernt Elemente, die einem angegebenen Prädikat entsprechen, aus dem Sammlung:
List<Book> books = new ArrayList<>();
ISBN isbn = new ISBN("0-201-63361-2");
books.removeIf(book -> book.getIsbn().equals(isbn));
Nach dem Login kopieren
  • Stream-API: Die Stream-API ermöglicht das Filtern und Entfernen von Elementen mithilfe von Pipelines:
List<Book> books = new ArrayList<>();
ISBN isbn = new ISBN("0-201-63361-2");
List<Book> filtered = books.stream()
                           .filter(book -> book.getIsbn().equals(isbn))
                           .collect(Collectors.toList());
Nach dem Login kopieren

Unterliste oder Teilmenge

Bei sortierten Listen kann das Entfernen aufeinanderfolgender Elemente effizient mit durchgeführt werden Unterlisten:

List<Book> books = new ArrayList<>();
books.subList(0, 5).clear();
Nach dem Login kopieren

Überlegungen

Die Wahl der Änderungsmethode hängt vom jeweiligen Szenario und Sammlungstyp ab. Hier sind einige wichtige Überlegungen:

  • Die Technik „Sammeln und Entfernen“ ist vielseitig und funktioniert mit jeder Sammlung.
  • Der ListIterator-Ansatz ist effizient, aber nur auf Listen mit unterstützenden Implementierungen anwendbar.
  • Der Iterator-Ansatz unterstützt die Entfernung, ist jedoch möglicherweise nicht allgemein verfügbar.
  • JDK 8-Methoden bieten eine effiziente Filterung und Entfernung erfordern jedoch die Übertragung in eine neue Sammlung.
  • Unterlisten ermöglichen die Massenentfernung aufeinanderfolgender Elemente in sortierten Listen.

Das obige ist der detaillierte Inhalt vonWie kann ich Sammlungen beim Iterieren in Java sicher ändern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage