Количество бакетов в HashMap
(а также в Hashtable
, ConcurrentHashMap
) увеличивается принципом удвоения при достижении определенного порога заполнения, называемого load factor.
Принцип увеличения происходит при вызове метода resize()
. Этот метод вызывается, когда количество элементов (size
) превышает произведение текущей емкости (capacity
) на коэффициент загрузки (load factor
).
- Initial Capacity (Начальная емкость): Количество бакетов при создании хеш-таблицы. По умолчанию 16.
- Load Factor (Коэффициент загрузки): Максимальная доля заполнения бакетов, при котором происходит увеличение емкости. По умолчанию 0.75.
- Threshold (Порог): Максимальное количество элементов, после которого произойдет ресайз. Рассчитывается как
capacity * load factor
.
Когда size > threshold
, вызывается resize()
. В процессе ресайза:
- Создается новый массив бакетов с емкостью, в два раза превышающей текущую (
newCapacity = oldCapacity * 2
).
- Все элементы из старого массива бакетов перехешируются и перераспределяются по новому массиву бакетов. Это необходимо, потому что хеш-функция, используемая для определения бакета, зависит от размера массива.
- Обновляется значение
threshold
Количество бакетов в HashMap
(а также в Hashtable
, ConcurrentHashMap
) увеличивается принципом удвоения при достижении определенного порога заполнения, называемого load factor.
Принцип увеличения происходит при вызове метода resize()
. Этот метод вызывается, когда количество элементов (size
) превышает произведение текущей емкости (capacity
) на коэффициент загрузки (load factor
).
- Initial Capacity (Начальная емкость): Количество бакетов при создании хеш-таблицы. По умолчанию 16.
- Load Factor (Коэффициент загрузки): Максимальная доля заполнения бакетов, при котором происходит увеличение емкости. По умолчанию 0.75.
- Threshold (Порог): Максимальное количество элементов, после которого произойдет ресайз. Рассчитывается как
capacity * load factor
.
Когда size > threshold
, вызывается resize()
. В процессе ресайза:
- Создается новый массив бакетов с емкостью, в два раза превышающей текущую (
newCapacity = oldCapacity * 2
).
- Все элементы из старого массива бакетов перехешируются и перераспределяются по новому массиву бакетов. Это необходимо, потому что хеш-функция, используемая для определения бакета, зависит от размера массива.
- Обновляется значение
threshold