Maison >Java >javaDidacticiel >Comment éviter ConcurrentModificationException lors de l'itération dans les 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!