Ответ
На первом собеседовании по Java часто проверяют понимание базовых концепций языка и стандартных подводных камней. Классический пример — работа с коллекциями и итераторами.
Типичная задача и ошибка:
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));
for (String s : list) { // Используется итератор неявно
if (s.equals("B")) {
list.remove(s); // ConcurrentModificationException!
}
}
Проблема: Модификация коллекции (list.remove()) во время итерации через for-each (который использует Iterator) приводит к ConcurrentModificationException.
Правильные решения:
- Явное использование
Iteratorи его методаremove():Iterator<String> iterator = list.iterator(); while (iterator.hasNext()) { String s = iterator.next(); if (s.equals("B")) { iterator.remove(); // Безопасное удаление } } - Использование метода
removeIf()(Java 8+):list.removeIf(s -> s.equals("B")); - Создание копии коллекции для итерации:
new ArrayList<>(list).forEach(s -> { if (s.equals("B")) list.remove(s); });Такой вопрос проверяет знание fail-fast итераторов и безопасных способов модификации коллекций.