Почему изменение хеш-кода объекта, используемого в качестве ключа в HashMap, приводит к тому, что поиск возвращает ноль?

Рассмотрим следующий сценарий:

Object o1 = new Object();
Object o2 = new Object();

HashMap<Object, Object> map = new HashMap<Object, Object>();
map.put(o1, o2);

boolean test1 = map.get(o1) == o2; // This evaluates to true

// Now lets say we alter the state of o1:
o1.setSomeInternalState(Object newState);

boolean test2 = map.get(o1) == o2; // This evaluates to false, because now map.get(o1) returns null

Предположим, что класс для o1 переопределенequals() а такжеhashCode().

Я столкнулся с этой проблемой во время отладки, потому что я явно переопределилequals а такжеhashCode на одном конкретном объекте, который я использую в некоторой бизнес-логике. Я могу полностью понять, почему хеш-код объекта изменяется, когда я изменяю его состояние, но почему map.get (o1) должен возвращать ноль из-за этого? Существует только один объект, поэтому не должен совпадать хэш-код ключа?

Ответы на вопрос(6)

Ваш ответ на вопрос