Sicheres Entfernen von Elementen während der Iteration in Java
F: Ist es zulässig, Elemente aus einer Sammlung zu entfernen, während mit einer foreach-Schleife darüber iteriert wird? in Java?
A: Die Verwendung einer foreach-Schleife zum Entfernen ist nicht möglich ratsam.Es kann zu unerwartetem Verhalten führen, da der zugrunde liegende Iterator nicht verfügbar gemacht wird und nicht direkt für Änderungen zugänglich ist.
Beispiel:
List<String> names = .... for (String name : names) { // Do something names.remove(name). }
Dieser Code schlägt möglicherweise mit einem java.util fehl .ConcurrentModificationException, da der Entfernungsvorgang die Sammlung darunter ändert, während die foreach-Schleife ausgeführt wird.
F: Können wir Elemente entfernen, die noch nicht vorhanden waren? schon wiederholt?
A: Nein. Das Entfernen von Elementen, die noch nicht in der Schleife verarbeitet wurden, kann zu einem Fehler „Index außerhalb der Grenzen“ führen. Beispiel:
//Assume that the names list as duplicate entries List<String> names = .... for (String name : names) { // Do something while (names.remove(name)); }
Um Elemente während der Iteration sicher zu entfernen, sollte ein Iterator verwendet werden:
List<String> names = .... Iterator<String> i = names.iterator(); while (i.hasNext()) { String s = i.next(); // must be called before you can call i.remove() // Do something i.remove(); }
In der Java-Dokumentation wird betont, dass von den Methoden iterator und listIterator zurückgegebene Iteratoren „fehlgeschlagen“ sind. schnell." Alle strukturellen Änderungen an der Liste außerhalb der Remove- oder Add-Methoden des Iterators führen zu einer ConcurrentModificationException.
Das obige ist der detaillierte Inhalt vonWie entferne ich während der Iteration sicher Elemente aus einer Java-Sammlung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!