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