Ответ
Размер массива корзин в HashMap всегда является степенью двойки. Это позволяет эффективно вычислять индекс корзины через битовую операцию (n - 1) & hash.
Поведение по умолчанию:
- Начальная емкость (initial capacity): 16.
- Коэффициент загрузки (load factor): 0.75.
- Порог расширения (threshold):
емкость * load factor. При достижении этого количества элементов массив корзин увеличивается вдвое.
Пример процесса:
HashMap<String, Integer> map = new HashMap<>(); // Создается массив на 16 корзин.
// Порог = 16 * 0.75 = 12.
for (int i = 0; i < 12; i++) {
map.put("key" + i, i); // Добавление 12 элементов.
}
// При добавлении 13-го элемента порог превышен.
map.put("key12", 12); // Запускается resize().
// Внутренний массив пересоздается с емкостью 32, все элементы перераспределяются.
Ограничения:
- Максимальная емкость:
1 << 30(1073741824). - Минимальная: 1 (если задана явно в конструкторе). Любое значение, переданное в конструктор, округляется вверх до ближайшей степени двойки.