Я просматриваю класс HashMap в Java. Я понимаю, что емкость хэш-таблицы составляет 2 от мощности количества ведер (емкость 16 означает четыре ведра). Когда вызывается put (ключ, значение), key.hashCode() выводит целочисленное число, и эта новая добавленная пара (ключ, значение) помещается на основе количества кодов buckets.hashCode()%. Но следующее фактическое выполнение в HashMap.classhash() реализация в java
static final int hash(Object key) {
int h;
return (key == null) ? 0 : (h = key.hashCode())^(h >>> 16);
}
Из приведенного выше кода, я не могу понять, как делает установку key.hashCode() значение в ведра произойдет.
Я уже прошел через ссылку, которую вы прикрепляли (также в hashmap.class). Не могли бы вы рассказать о том, что «это» просто «распространяет хэш-код». – AV94
Я предполагаю, что это оптимизация для небольших (<2^16 записей) HashMaps. Если бы вы не распространяли более высокие биты, они были бы полностью проигнорированы на этих картах. –
Хорошо, теперь яснее. Я думаю, когда значение хэша больше, чем количество ведер, (n-1) & hash просто дает вам остаток. – AV94