Heim >Java >javaLernprogramm >Wie entferne ich während der Iteration sicher Elemente aus einer Java-Sammlung?

Wie entferne ich während der Iteration sicher Elemente aus einer Java-Sammlung?

DDD
DDDOriginal
2024-12-21 01:02:13134Durchsuche

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

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!

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