Какое начальное количество корзин (бакетов) создается в HashMap по умолчанию?

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

Ответ

При создании HashMap конструктором без параметров устанавливается начальная емкость (capacity) в 16 корзин и коэффициент загрузки (load factor) 0.75.

Как это работает:

  1. Емкость 16: означает, что внутренняя хеш-таблица изначально имеет 16 ячеек (бакетов).
  2. Коэффициент загрузки 0.75: определяет порог заполнения для увеличения размера. При достижении capacity * loadFactor элементов (т.е. 16 * 0.75 = 12) происходит удвоение емкости и рехеширование всех элементов.

Примеры создания:

// Дефолтные параметры: 16 бакетов, load factor 0.75
Map<String, Integer> defaultMap = new HashMap<>();

// Указание начальной емкости (округлится до степени двойки)
Map<String, Integer> customMap = new HashMap<>(32); // Фактически 32 бакета
Map<String, Integer> customMap2 = new HashMap<>(50); // Округлится до 64

Важно: Фактическое количество бакетов всегда является степенью двойки. Если в конструкторе указана произвольная емкость, она автоматически округляется вверх до ближайшей степени двойки.