Как HashMap может потерять значение

«Как HashMap может потерять значение» — вопрос из категории Java, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

HashMap может потерять значение из-за отсутствия синхронизации в многопоточной среде. Если несколько потоков одновременно модифицируют HashMap (например, добавляют/удаляют элементы), может возникнуть race condition, приводящий к потере данных или повреждению внутренней структуры.

Пример:

val map = HashMap<Int, String>()
(0..1000).forEach { i ->
    thread { map[i] = "value$i" }
}
// Некоторые значения могут отсутствовать из-за гонки потоков

Решение: использовать ConcurrentHashMap или синхронизировать доступ:

val syncMap = Collections.synchronizedMap(HashMap<Int, String>())

Также значения могут "потеряться" при изменении ключа после добавления в HashMap, так как хэш ключа пересчитывается.