Heim >Java >javaLernprogramm >Wie kann ich ConcurrentModificationException beim Iterieren und Ändern einer Java-Liste vermeiden?

Wie kann ich ConcurrentModificationException beim Iterieren und Ändern einer Java-Liste vermeiden?

DDD
DDDOriginal
2024-11-29 13:25:11495Durchsuche

How Can I Avoid ConcurrentModificationException When Iterating and Modifying a Java List?

Grundlegendes zur Concurrent Modification Exception in Java

Die ConcurrentModificationException tritt auf, wenn mehrere Threads gleichzeitig eine veränderbare Sammlung ändern und dabei häufig deren interne Konsistenz verletzen. Um dieses Konzept zu veranschaulichen, analysieren wir einen Codeausschnitt, der auf diese Ausnahme stößt.

import java.util.*;

public class ConcurrentModificationExample {

    public static void main(String[] args) {
        List<String> s = new ArrayList<>();
        ListIterator<String> it = s.listIterator();

        for (String a : args)
            s.add(a);

        if (it.hasNext())
            String item = it.next();

        System.out.println(s);
    }
}

Dieser Code versucht, eine Liste zu durchlaufen und dabei Elemente hinzuzufügen. Die Ausnahme wird jedoch ausgelöst, weil der ListIterator erstellt wurde, bevor die Elemente hinzugefügt wurden.

Um diesen Fehler zu vermeiden, können wir den Code wie folgt ändern:

import java.util.*;

public class ConcurrentModificationExample {

    public static void main(String[] args) {
        List<String> s = new ArrayList<>();

        for(String a : args)
            s.add(a);

        ListIterator<String> it = s.listIterator();    
        if(it.hasNext()) {  
            String item = it.next();   
        }  

        System.out.println(s);

    }
}

In diesem überarbeiteten Code: Der Listeniterator wird erstellt, nachdem die Elemente zur Liste hinzugefügt wurden, um die Konsistenz sicherzustellen. Ein ListIterator ermöglicht die Änderung der Liste während der Iteration. Es ist jedoch wichtig, dass er nach der Initialisierung der Liste erstellt und zwischen Erstellung und Verwendung nicht geändert wird. Dadurch wird sichergestellt, dass die Liste während der gesamten Iteration in einem gültigen Zustand bleibt.

Das obige ist der detaillierte Inhalt vonWie kann ich ConcurrentModificationException beim Iterieren und Ändern einer Java-Liste vermeiden?. 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