Ответ
В HashMap метод hashCode() используется исключительно для ключа (Key).
Причина: Основная задача HashMap — обеспечить быстрый доступ к значению (Value) по ключу. Хэш-код ключа определяет номер «корзины» (bucket), в которую будет помещена или из которой будет извлечена пара Key-Value.
Как это работает при вставке (put()):
- Вычисляется
key.hashCode(). - На основе хэш-кода определяется индекс корзины в массиве
HashMap. - В найденной корзине (связный список/дерево в Java 8+) ищется запись с таким же ключом (проверяется
equals()). - Если ключ найден, значение обновляется. Если нет — добавляется новая запись.
Пример и важное следствие:
Map<KeyClass, String> map = new HashMap<>();
KeyClass key = new KeyClass("id", 1);
map.put(key, "value"); // hashCode() вызывается у объекта 'key'
// ОПАСНО: Если изменить состояние ключа, его hashCode может измениться
key.setId("newId"); // Теперь key.hashCode() возвращает другое значение!
String value = map.get(key); // Возвратит null! Ключ "потерян" в другой корзине.
Вывод: Ключи в HashMap должны быть immutable (или, по крайней мере, не менять поля, участвующие в hashCode() и equals()), чтобы избежать потери данных.