Внутренняя реализация java.util.HashMap и HashSet
Я пытался понять внутреннюю реализациюjava.util.HashMap
а такжеjava.util.HashSet
.
Следующее - сомнения, всплывающие в моей голове некоторое время:
Какова важность@Override public int hashcode()
в HashMap / HashSet? Где этот хеш-код используется внутри?Я обычно видел ключ HashMap бытьString
любитьmyMap<String,Object>
, Могу ли я сопоставить значения сsomeObject
(вместо строки) какmyMap<someObject, Object>
? Какие все контракты мне нужно соблюдать, чтобы это произошло успешно?Заранее спасибо !
РЕДАКТИРОВАТЬ:
Мы говорим, что хеш-код ключа (проверка!) Является фактической вещью, в которую отображается значение в хеш-таблице? И когда мы делаемmyMap.get(someKey);
Ява внутренне зоветsomeKey.hashCode()
получить число в хэш-таблице для поиска результирующего значения?Ответ: Да.
РЕДАКТИРОВАТЬ 2:
Вjava.util.HashSet
откуда ключ генерируется для хэш-таблицы? Это из объекта, который мы добавляем, например.mySet.add(myObject);
тогдаmyObject.hashCode()
собирается решить, где это находится в хэш-таблице? (поскольку мы не даем ключи в HashSet).Ответ: Добавленный объект становится ключом. Значение пустышка!