В различных jdk1.7 jdk1.8 HashMap и базового исходного кода, воплощенного и реализованного Детальный

Во-первых, то, что хэш-код, что?

В базовой реализации истока HashMap, мы часто видим хэш-код, то, что хэш-код, в конце концов?

Будь то в jdk1.7 или 1.8, будет использоваться при расчете метода хэш-значение. Это родной класс метода объекта, способ может быть понят как дно, в основном для Возвращает хэш-код, который хранится в адресной JVM объекта кучной заинтересованной. Т.е. не переопределить этот метод, различные объекты отличаются от значения, полученного, следующий исходный код:

 public native int hashCode();

Во-вторых, то, что хэш-функции?

1.jdk1.7 хэш-функции:

Мы можем видеть из исходного хэш-значение является значением операции XOR с HashCode и серией Получаемое сдвинуты из эксплуатации, так что хэш может быть получено с хорошим значением хэш

2.jdk1.8 хэш-функции

Может быть видно из числа строк, число jdk1.8 хэш-функции упрощает его использование хэш-код вычисляется значение хэш-значение и операции сдвига

В-третьих, как определить HashMap в индекс массива

1. Давайте посмотрим на функции положить jdk1.7

Определение значения индекса массива я определяется хэш-функции и indexFor, в то время как функция используется indexFor & хэш-значение, рассчитанное исходя из длины массива и -1
Here Вставка рисунка Описание
Here Вставка рисунка Описание

Функция положить 2.jdk1.8 в

jdk1.8 putVal вызывается в функции, и в котором обработку, аналогичную 1.7, также определяется длина массива, с -1 и хэш-значения вычисляется по индекс массива
Here Вставка рисунка Описание

В-четвертых, почему использовать оператор XOR (^) при вычислении хэш-значений не (&) оператор делать?

При вычислении хэш-значение хеш-значения, тем больше мы должны обеспечить более хэш Представьте себе, если и оператор будет как? Пока бит равен 0, то оператор проводят и результаты, полученные на сайте, безусловно, будет 0, то это приведет к номеру детали не имеет права, поэтому хэш будет снижаться.

В. Почему & (длина-1), чтобы получить индекс массива

Мы знаем, в емкости HashMap является степень двойки, а затем преобразуется в двоичный 0, безусловно, последнее, то длина-1 может гарантировать, что бинарный высок 0, 1 низкие (например, 16: 0001 0000 (16-1): 0000 1111), и поэтому может быть битым HashCode низкого значения хэша, так что весь массив, весь массив памяти с помощью несколько объектов, уменьшить хэш конфликты. А использование и, вычисленное для обеспечения Ярлыка не трансграничную, так как верхняя длина массива преобразуется в двоичный 0, после того, как и расчет необходимо также получить большое число 0, что гарантирует, что массив не выходит за пределы диапазона.

В-шестых, почему операция сдвига?

Сдвиг, чтобы позволить высокой хэш-код также участвуют в вычислениях, так что весь хэш лучших результатов.

Семь, то проблема снова, как это левый мозг Hashcode хэш-значения, то почему бы не использовать хэш-код, непосредственно участвующих в операции, чтобы вычислить индекс массива, а также с Hashcode значение вычисляется хэш-значения, а затем задать массив пометить его?

Не забывайте, что емкость HashMap не она неизменна, когда расширение HashMap, мы должны в полной мере использовать новый массив в пространство, которое требуется для элементов перераспределения массива за счет стоимости Hashcode связанной с адресом хранения , до тех пор, как изменение элементов, то их положение в массиве не изменится, при добавлении к длине массива для вычисления значения хеш-функции, это время, чтобы позволить расширение, емкость изменяется массива, значение хеш-функции будет меняться, а затем элементы позиция массива также изменится снова.

Краткое описание:

+ Jdk1.7HashMap , лежащий в основе реализации использует список массива, лежащая в основе реализация с использованием массивом jdk1.8 + (длина цепи 8 при включении красно-черного дерева) + красный-черный список дерева
jdk1.7HashMap используется при добавлении списка является первым методом интерполяции, jdk1.8 интерполяция с хвостом

Опубликовано 24 оригинальные статьи · вона похвала 0 · Просмотров 609

рекомендация

отblog.csdn.net/weixin_43896829/article/details/104375274
рекомендация