Что такое Load Factor в контексте хэш-таблиц (например, HashMap)?

«Что такое Load Factor в контексте хэш-таблиц (например, HashMap)?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Load Factor (коэффициент загрузки) — это пороговое значение заполнения хэш-таблицы, при достижении которого её внутренний массив (capacity) увеличивается, и все элементы перехэшируются (rehash). Это компромисс между производительностью и использованием памяти.

  • Значение по умолчанию в java.util.HashMap — 0.75f.
  • Формула срабатывания: capacity * loadFactor. Например, при начальной capacity=16 и loadFactor=0.75, resize произойдёт при добавлении 12-го элемента.

Влияние на производительность:

  • Высокий Load Factor (близкий к 1.0): Экономит память, но увеличивает вероятность коллизий, что замедляет операции поиска и добавления (время деградирует к O(n)).
  • Низкий Load Factor (например, 0.5): Уменьшает коллизии и ускоряет операции, но требует больше памяти.

Пример создания HashMap с кастомным Load Factor:

// Создаёт HashMap с начальной ёмкостью 32 и порогом resize = 32 * 0.5 = 16
Map<String, Integer> map = new HashMap<>(32, 0.5f);