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
Mary-Kate Olsenoriginal
2024-11-23 20:23:12624parcourir

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);
    }
}

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);
    }
}

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!

Déclaration:
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