😵 Почему ConcurrentModificationException так часто ловят джуны
Разбираем с примерами, почему список нельзя менять в цикле и как не наступить на этот баг
Когда ты только начинаешь писать на Java, одна из первых ошибок, с которой сталкиваются новички — это страшный зверь с длинным именем: ConcurrentModificationException
. Эта ошибка выглядит пугающе, но причина её — банальна. Давайте разберёмся, почему она возникает и как её избежать.

Что вообще происходит?
List<String> names = new ArrayList<>();
names.add("Аня");
names.add("Борис");
names.add("Вика");
for (String name : names) {
if (name.equals("Вика")) {
names.remove(name); // 💥 ConcurrentModificationException!
}
}
Но вместо результата ты ловишь исключение.
🤛 Почему это происходит?
Потому что for-each
использует итератор внутри, а ты в это время меняешь сам список. Это всё равно что ты идёшь по мосту, а кто-то в это время разбирает доски позади тебя. JVM такая: «СТОП! Это небезопасно!» 🚨
🔍 Как понять, что именно вызывает ошибку
list.remove()
внутриfor-each
map.put()
внутриfor
поmap.entrySet()
Модификация через коллекцию внутри
Stream
✅ Как правильно
🛠 Способ 1: Используй обычный for
for (int i = 0; i < names.size(); i++) {
if (names.get(i).equals("Вика")) {
names.remove(i);
i--;
}
}
🛠 Способ 2: Используй Iterator
Iterator<String> it = names.iterator();
while (it.hasNext()) {
if (it.next().equals("Вика")) {
it.remove();
}
}
🛠 Способ 3: Используй removeIf
names.removeIf(name -> name.equals("Вика"));
🤯 Почему джуны часто ошибаются
❌ Не знают, что
for-each
внутри используетIterator
❌ Путают
remove()
у коллекции и у итератора❌ Боятся использовать
Iterator
, потому что он кажется «старым»❌ Не читают стек трейс внимательно
💬 Как это звучит на собесе
— Почему у тебя в коде
ConcurrentModificationException
?
— Я просто удалял элемент внутриfor-each
...
ConcurrentModificationException
— это не баг, это защита от потенциально опасного поведения. И если ты её поймал — радуйся! Ты теперь на шаг ближе к тому, чтобы понять Java на глубоком уровне 🧩
📚 Хочешь углубиться в тему?
В приложении Кодик ты найдёшь подробные уроки по CMake и C++, пошаговые упражнения, разбор ошибок и удобную практику прямо в телефоне или браузере.
А если хочешь быть в курсе новостей, новых фич и полезных материалов — подписывайся на наш Telegram-канал. Там уютно, по делу и с любовью к коду ❤️