Вопрос проверяет понимание потокобезопасности и итерации по HashMap в Java, что важно для предотвращения ConcurrentModificationException.
При итерации по HashMap с помощью for-each или Iterator, если другой поток или сам код изменяет структуру карты (добавляет или удаляет элементы), возникает ConcurrentModificationException. Это происходит из-за fail-fast поведения итератора, который проверяет количество модификаций.
// Использование ConcurrentHashMap
ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();
map.put("A", 1);
map.put("B", 2);
for (String key : map.keySet()) {
if (key.equals("A")) {
map.remove(key); // Безопасно
}
}
// Копирование ключей
HashMap<String, Integer> hashMap = new HashMap<>();
hashMap.put("A", 1);
Object[] keys = hashMap.keySet().toArray();
for (Object key : keys) {
if (key.equals("A")) {
hashMap.remove(key); // Безопасно
}
}Для многопоточных сценариев используйте ConcurrentHashMap, так как он обеспечивает потокобезопасность и высокую производительность. В однопоточном коде можно применять Iterator.remove() или копирование ключей для избежания исключений.