Maison > Java > javaDidacticiel > Comment éviter ConcurrentModificationException lors de l'itération dans les collections ?

Comment éviter ConcurrentModificationException lors de l'itération dans les collections ?

Mary-Kate Olsen
Libérer: 2024-11-23 20:23:12
original
655 Les gens l'ont consulté

How to Avoid ConcurrentModificationException When Iterating Through Collections?

Exception de modification simultanée

Lorsque vous traitez des collections, vous pouvez rencontrer l'exception ConcurrentModificationException, indiquant qu'une collection a été modifiée alors qu'un itérateur est en cours utiliser. Cela peut être une erreur à déboguer qui peut prêter à confusion, surtout si vous ne voyez aucune concurrence apparente dans votre code.

Considérez l'exemple suivant :

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);
    }
}
Copier après la connexion

Dans ce code, une ConcurrentModificationException est lancé car la liste s est modifiée en ajoutant des éléments (en utilisant s.add()) alors que l'itérateur est créé mais pas encore utilisé.

Pour résoudre ce problème, vous devez créer l'itérateur une fois que la liste a été entièrement remplie. Voici une version corrigée du code :

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);
    }
}
Copier après la connexion

Cette modification garantit que l'itérateur est créé et utilisé une fois la collection entièrement modifiée, évitant ainsi tout problème de concurrence.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal