Sobes.tech
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 работает корректно.