Моя забота заключалась в том, чтобы проверить, как Java HashMap получает тот же самый индекс для ключа. Даже когда размер увеличивается от значения по умолчанию 16 до гораздо более высоких значений, мы продолжаем добавлять записи.HashMap может отличаться индексом ковша для ключа?
Я попытался воспроизвести алгоритм индексирования HashMap.
int length=1<<5;
int v=6546546;
int h = new Integer(v).hashCode();
h =h^((h >>> 20)^(h >>> 12));
h=h^h >>> 7^h >>> 4;
System.out.println("index :: " + (h & (length-1)));
Я запустил свой код для разных значений «длина». Так что для одного и того же ключа я получаю разные индексы, так как изменяется длина HashMap. Что мне здесь не хватает?
Мои результаты:
length=1<<5;
index :: 10
length=1<<15;
index :: 7082
length=1<<30;
index :: 6626218
Спасибо, Джон! Я предпочитаю игнорировать функцию transfer(). Предполагая, что это будет просто создание нового массива и копирование записей. Вы сохранили некоторые из моих часов: D Невозможно перепроверить, поскольку я новичок в Stackoverflow и еще не набрал очков. Простите за это :( – user2307034