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