Heim > Java > javaLernprogramm > Hauptteil

Wie vermeide ich ConcurrentModificationException beim Durchlaufen von Sammlungen?

Mary-Kate Olsen
Freigeben: 2024-11-23 20:23:12
Original
558 Leute haben es durchsucht

How to Avoid ConcurrentModificationException When Iterating Through Collections?

Concurrent Modification Exception

Beim Umgang mit Sammlungen kann die ConcurrentModificationException auftreten, die darauf hinweist, dass eine Sammlung geändert wurde, während ein Iterator aktiv ist verwenden. Dies kann beim Debuggen ein verwirrender Fehler sein, insbesondere wenn Sie keine offensichtliche Parallelität in Ihrem Code sehen.

Betrachten Sie das folgende Beispiel:

import java.util.*;

public class SomeClass {
    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);
    }
}
Nach dem Login kopieren

In diesem Code gibt es eine ConcurrentModificationException Wird ausgelöst, weil die Liste s durch Hinzufügen von Elementen (mithilfe von s.add()) geändert wird, während der Iterator sie erstellt, aber noch nicht verwendet.

Um dieses Problem zu beheben, sollten Sie den Iterator erstellen, nachdem die Liste vollständig gefüllt wurde. Hier ist eine korrigierte Version des Codes:

import java.util.*;

public class SomeClass {

    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);
    }
}
Nach dem Login kopieren

Diese Änderung stellt sicher, dass der Iterator erstellt und verwendet wird, nachdem die Sammlung vollständig geändert wurde, wodurch Probleme mit der Parallelität vermieden werden.

Das obige ist der detaillierte Inhalt vonWie vermeide ich ConcurrentModificationException beim Durchlaufen von Sammlungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage