{}const=>[]async()letfn</>var
Entwicklung

😵 Warum ConcurrentModificationException so oft von Juns gefangen wird

Wir analysieren anhand von Beispielen, warum die Liste in der Schleife nicht geändert werden kann und wie man diesen Fehler vermeidet

К

Kodik

Autor

2 Min. Lesezeit

Wenn Sie gerade erst anfangen, in Java zu schreiben, ist einer der ersten Fehler, auf die Anfänger stoßen, ein schreckliches Biest mit einem langen Namen: ConcurrentModificationException. Dieser Fehler sieht beängstigend aus, aber der Grund dafür ist trivial. Lassen Sie uns herausfinden, warum er auftritt und wie man ihn vermeiden kann.

Was ist los?

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!
    }
}

Aber anstelle des Ergebnisses fängst du eine Ausnahme.

🔥 100.000+ Schüler sind bereits bei uns

Genug Theorie gelesen?
Zeit zu coden!

Kodik — eine App, in der du durch Praxis programmieren lernst. KI-Mentor, interaktive Lektionen, echte Projekte.

🤖 KI 24/7
🎓 Zertifikate
💰 Kostenlos
🚀 Jetzt starten
Heute beigetreten

🤛 Warum passiert das?

Weil for-each verwendet Iterator und du änderst gerade die Liste selbst. Es ist, als würdest du über eine Brücke gehen und jemand würde die Bretter hinter dir auseinandernehmen. JVM sagt: „STOPP! Das ist nicht sicher!“ 🚨

🔍 Wie Sie verstehen, was genau den Fehler verursacht

  • list.remove() innerhalb for-each

  • map.put() innerhalb for bis map.entrySet()

  • Änderung durch Sammlung innerhalb von Stream

✅ Wie es richtig gemacht wird

🛠 Methode 1: Verwenden Sie ein normales for

for (int i = 0; i < names.size(); i++) {
    if (names.get(i).equals("Vika")) {
        names.remove(i);
        i--;
    }
}

🛠 Methode 2: Verwenden Sie Iterator

Iterator<String> it = names.iterator();
while (it.hasNext()) {
    if (it.next().equals("Vika")) {
        it.remove();
    }
}

🛠 Methode 3: Verwenden Sie removeIf

names.removeIf(name -> name.equals("Vika"));

🤯 Warum Jungs oft falsch liegen

  • ❌ Sie wissen nicht, dass for-each Iterator verwendet

  • ❌ Verwechseln remove() bei der Sammlung und beim Iterator

  • ❌ Sie haben Angst, Iterator zu verwenden, weil es "alt" aussieht

  • ❌ Lesen Sie den Trace Stack nicht sorgfältig

💬 Wie es im Gespräch klingt

— Warum hast du ConcurrentModificationException in deinem Code?
— Ich habe gerade das Element in for-each gelöscht...

ConcurrentModificationException ist kein Fehler, sondern ein Schutz vor potenziell gefährlichem Verhalten. Und wenn du es erwischt hast, sei froh! Du bist jetzt einen Schritt näher daran, Java auf einer tiefen Ebene zu verstehen 🧩

📚 Möchten Sie tiefer in das Thema einsteigen?

Im Anhang Kodik Du findest detaillierte Lektionen zu CMake und C++, Schritt-für-Schritt-Übungen, Fehleranalyse und praktische Übungen direkt auf deinem Handy oder Browser.

Und wenn Sie über Neuigkeiten, neue Funktionen und nützliche Materialien informiert werden möchten, abonnieren Sie unseren Telegram-Kanal. Dort ist es gemütlich, geschäftlich und mit Liebe zum Code ❤️

🎯Hör auf zu zögern

Artikel gefallen?
Zeit zum Üben!

Bei Kodik liest du nicht nur — du schreibst sofort Code. Theorie + Praxis = echte Skills.

Sofortige Praxis
🧠KI erklärt Code
🏆Zertifikat

Keine Registrierung • Keine Karte