Visage отвечает на вопрос в целом: значения хеш-функции, рассчитанные по ключам, отображаются на сегменты путем их распределения по модулю фактического размера карты, а когда размер карты изменяется, все элементы снова распространяются по новому диапазону.ведер.
Однако, начиная с Java 1.4, за кулисами происходит несколько вещей, о которых стоит знать.Прежде всего, в традиционной хэш-карте размер в идеале должен быть простым числом, поскольку это помогает более равномерно распределить элементы по диапазону сегментов.Однако в Java 1.4 HashMap размер всегда является степенью двойки!Это может привести к тому, что стандартное распределение будет вести себя очень плохо - однако в этой реализации значения хеша перефразированы внутренне с использованием очень быстрого алгоритма для сглаживания распределения.
Подробнее в Java SpecialistБюллетени, выпуски 54 и 54b .