Mediumiterator
Чем fail-fast отличается от fail-safe iterator?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Fail-fast — бросает ConcurrentModificationException при модификации коллекции во время итерации. Коллекция хранит modCount, iterator проверяет его при next(). Fail-safe/weakly consistent — работает на снимке, не бросает исключение.
// Fail-fast: ArrayList, HashMap, HashSet
for (String s : arrayList) {
arrayList.add("x"); // ConcurrentModificationException
}
// Weakly consistent: ConcurrentHashMap, CopyOnWriteArrayList
for (String s : concurrentHashMap.keySet()) {
concurrentHashMap.put("x", 1); // OK, не бросает
}- Fail-fast — early error detection для single-thread bugs, не guarantee для concurrency (undefined per JLS);
CopyOnWriteArrayList— snapshot массива;ConcurrentHashMap— weakly consistent (отражает состояние на момент создания или позже);- В concurrency использовать concurrent collections, не полагаться на CME.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.