Количество бакетов в HashMap (а также в Hashtable, ConcurrentHashMap) увеличивается принципом удвоения при достижении определенного порога заполнения, называемого load factor.
Принцип увеличения происходит при вызове метода resize(). Этот метод вызывается, когда количество элементов (size) превышает произведение текущей емкости (capacity) на коэффициент загрузки (load factor).
capacity * load factor.Когда size > threshold, вызывается resize(). В процессе ресайза:
newCapacity = oldCapacity * 2).threshold для новой емкости (newThreshold = newCapacity * load factor).Пример псевдокода для resize():
java
Целью удвоения емкости является поддержание амортизированного постоянного времени для операций get и put. Удвоение гарантирует, что количество бакетов растет достаточно быстро, чтобы минимизировать коллизии при равномерном распределении хешей ключей. Слишком маленькое увеличение емкости приводило бы к частым ресайзам, что было бы неэффективно.