Lorsque vous commencez à écrire en Java, l'une des premières erreurs rencontrées par les débutants est une bête effrayante avec un nom long : ConcurrentModificationException. Cette erreur semble effrayante, mais sa raison est banale. Voyons pourquoi cela se produit et comment l'éviter.

Que se passe-t-il ?
List<String> names = new ArrayList<>();
names.add("Anya");
names.add("Boris");
names.add("Vika");
for (String name : names) {
if (name.equals("Vika")) {
names.remove(name); // 💥 ConcurrentModificationException!
}
}Mais au lieu d'un résultat, vous obtenez une exception.
🤛 Pourquoi cela se produit-il ?
Parce que for-each utilise itérateur à l'intérieur, et vous changez la liste elle-même en même temps. C'est comme si vous traversiez un pont et que quelqu'un démontait les planches derrière vous. La JVM est comme : « STOP ! Ce n'est pas sûr ! » 🚨
🔍 Comment comprendre ce qui cause l'erreur
list.remove()à l'intérieur defor-eachmap.put()à l'intérieur deforparmap.entrySet()Modification via la collection à l'intérieur de
Stream
✅ Comment bien faire
🛠 Méthode 1 : Utilisez un for ordinaire
for (int i = 0; i < names.size(); i++) {
if (names.get(i).equals("Vika")) {
names.remove(i);
i--;
}
}🛠 Méthode 2 : Utiliser Iterator
Iterator<String> it = names.iterator();
while (it.hasNext()) {
if (it.next().equals("Vika")) {
it.remove();
}
}🛠 Méthode 3 : Utilise removeIf
names.removeIf(name -> name.equals("Vika"));🤯 Pourquoi les juns se trompent souvent
❌ Ils ne savent pas que
for-eachutiliseIteratorà l'intérieur❌ Confondre
remove()dans la collection et dans l'itérateur❌ Ils ont peur d'utiliser
Iteratorcar il semble « ancien »❌ Ne lisent pas attentivement la trace
💬 Comment cela sonne lors d'un entretien
— Pourquoi as-tu dans ton code
ConcurrentModificationException?
— J'ai juste supprimé l'élément à l'intérieur defor-each...
ConcurrentModificationException n'est pas un bug, c'est une protection contre les comportements potentiellement dangereux. Et si vous l'avez attrapé, réjouissez-vous ! Vous êtes maintenant un peu plus près de comprendre Java à un niveau profond 🧩
📚 Vous voulez approfondir le sujet ?
Dans l'application Code vous trouverez des leçons détaillées sur CMake et C++, des exercices étape par étape, des analyses d'erreurs et des exercices pratiques directement sur votre téléphone ou votre navigateur.
Et si vous voulez être au courant des nouveautés, des nouvelles fonctionnalités et des contenus utiles, abonnez-vous à notre Chaîne Telegram. C'est confortable, professionnel et avec amour pour le code ❤️
