Ä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);
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(); } }
JDK >= 8
Java 8 führt zusätzliche Methoden zur Sammlungsänderung ein:
List<Book> books = new ArrayList<>(); ISBN isbn = new ISBN("0-201-63361-2"); books.removeIf(book -> book.getIsbn().equals(isbn));
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());
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();
Überlegungen
Die Wahl der Änderungsmethode hängt vom jeweiligen Szenario und Sammlungstyp ab. Hier sind einige wichtige Überlegungen:
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!