Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про Java: collection, iterator, concurrency

Как избежать ConcurrentModificationException при удалении элементов из коллекции во время итерации?

Вопрос проверяет знание способов безопасного изменения коллекций во время итерации.

Короткий ответ

Используйте:

  1. Iterator.remove().

  2. Копирование коллекции (new ArrayList<>(list)).

  3. Потокобезопасные коллекции (ConcurrentHashMap).

Длинный ответ

1. Iterator.remove():

List<String> list = new ArrayList<>(List.of("a", "b"));
Iterator<String> it = list.iterator();
while (it.hasNext()) {
    	if (it.next().equals("a")) {
        	it.remove(); // Безопасное удаление
    	}
}

2. Копирование коллекции:

for (String item : new ArrayList<>(list)) {
    	if (item.equals("a")) {
        	list.remove(item); // Работает, т.к. итерируем по копии
    	}
}

3. Потокобезопасные коллекции:

ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();
map.put("a", 1);
for (String key : map.keySet()) {
    	if (key.equals("a")) {
        	map.remove(key); // Не вызывает исключение
    	}
}

Уровень

  • Рейтинг:

    2

  • Сложность:

    6

Навыки

  • Java

    Java

Ключевые слова

#collection

#iterator

#concurrency

Подпишись на Java Developer в телеграм