Back to questions
Junior — Middle
63
Что произойдет с объектом внутри HashMap, если его ключ станет недействительным или его идентификатор изменится?
Answer from AI
sobes.tech AI
В Java, если объект, используемый в качестве ключа в HashMap, изменяет свои поля, участвующие в вычислении hashCode() или equals(), это приведёт к проблемам при поиске этого ключа в карте.
HashMap использует hashCode() для определения бакета, а equals() — для поиска точного ключа внутри бакета. Если ключ изменился после помещения в карту, то:
- hashCode() может вернуть другое значение, и объект окажется в неправильном бакете.
- При попытке получить значение по ключу поиск не найдёт объект, так как он "потерян" в другой корзине.
Поэтому ключи в HashMap должны быть неизменяемыми или не менять поля, участвующие в hashCode() и equals().
Пример:
class Key {
int id;
public int hashCode() { return id; }
public boolean equals(Object o) { /* сравнение по id */ }
}
Key key = new Key();
key.id = 1;
HashMap<Key, String> map = new HashMap<>();
map.put(key, "value");
key.id = 2; // изменение ключа
System.out.println(map.get(key)); // скорее всего null
Изменение ключа после добавления в HashMap приводит к невозможности найти соответствующее значение.