Heim >Java >javaLernprogramm >Ist das Entfernen von Elementen während einer Java-For-Each-Schleife sicher und wie kann es richtig durchgeführt werden?
Elemente aus einer Sammlung während der Iteration entfernen
In Java kann das Ändern des Inhalts einer Sammlung während der Iteration mithilfe einer foreach-Schleife zu unerwarteten Ereignissen führen Verhalten und Ausnahmen. Es stellt sich die Frage, ob das Entfernen von Elementen aus der Sammlung in diesem Zusammenhang zulässig ist.
Zur Rechtmäßigkeit des Entfernens von Elementen in einer foreach-Schleife wie im bereitgestellten Beispiel:
List<String> names = .... for (String name : names) { // Do something names.remove(name). }
Die Antwort ist Ja, es ist legal, Elemente innerhalb einer foreach-Schleife zu entfernen. Es ist jedoch wichtig zu beachten, dass der Iterator der Sammlung nach dem Entfernen eines Elements ungültig werden kann, was möglicherweise zu einer ConcurrentModificationException führt.
Außerdem ist das Entfernen von Elementen, über die noch nicht iteriert wurde (wie im zweiten Beispiel), möglich nicht erlaubt. Die Implementierung des Iterators kann solche Szenarien ordnungsgemäß bewältigen oder auch nicht. Um potenzielle Probleme zu vermeiden, stellen Sie sicher, dass Sie alle Elemente durchlaufen, bevor Sie versuchen, welche zu entfernen.
Verwenden eines Iterators zum sicheren Entfernen
Um Elemente während der Iteration sicher zu entfernen, ist dies der Fall Es wird empfohlen, ein explizites Iterator-Objekt zu verwenden. Ein Iterator bietet direkte Kontrolle über den Entfernungsprozess und stellt sicher, dass die Sammlung während der gesamten Schleife gültig bleibt.
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(); }
Durch die Verwendung eines Iterators können Sie Elemente sicher entfernen, ohne Ausnahmen oder ungültige Sammlungszustände zu riskieren.
Das obige ist der detaillierte Inhalt vonIst das Entfernen von Elementen während einer Java-For-Each-Schleife sicher und wie kann es richtig durchgeführt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!