Senior
23
Как избежать проблемы с мутабельным ключом в HashMap?
Companies where asked
СБК ПАРУС
Answer from AI
sobes.tech AI
Проблема с мутабельным ключом в HashMap возникает, когда объект, используемый в качестве ключа, изменяется после помещения в карту. Это приводит к тому, что хэш-код ключа меняется, и HashMap не может найти соответствующую запись.
Чтобы избежать этой проблемы:
- Используйте неизменяемые объекты в качестве ключей (например, String, Integer или собственные классы с final полями).
- Если используете собственные классы, переопределите методы
hashCode()иequals()так, чтобы они основывались только на неизменяемых полях. - Не изменяйте поля объекта-ключа после помещения его в HashMap.
Пример:
class Key {
private final String id;
public Key(String id) {
this.id = id;
}
@Override
public int hashCode() {
return id.hashCode();
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Key)) return false;
Key key = (Key) o;
return id.equals(key.id);
}
}
// Использование
Map<Key, String> map = new HashMap<>();
map.put(new Key("123"), "value");
Таким образом, ключи остаются неизменяемыми, и HashMap работает корректно.