Назад к вопросам
Т-Банк
СБЕР дейвайсы
Junior — Middle
104
Что означает возникновение исключения ConcurrentModificationException в Java, и в каких ситуациях оно может быть выброшено?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Исключение ConcurrentModificationException в Java возникает, когда во время итерации по коллекции происходит её структурное изменение (например, добавление или удаление элементов) не через итератор, а напрямую через методы коллекции. Это механизм fail-fast, который предупреждает о потенциально опасных изменениях, которые могут привести к некорректной работе итератора.
Типичные ситуации, когда выбрасывается это исключение:
- Итерация по
ArrayListс помощьюIterator, при этом в цикле вызываетсяlist.remove()напрямую, а не черезiterator.remove(). - Модификация коллекции из другого потока во время итерации без синхронизации.
Пример:
List<String> list = new ArrayList<>(Arrays.asList("a", "b", "c"));
for (String s : list) {
if (s.equals("b")) {
list.remove(s); // выбросит ConcurrentModificationException
}
}
Правильный способ удаления во время итерации:
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String s = iterator.next();
if (s.equals("b")) {
iterator.remove(); // безопасно
}
}