Чтобы использовать пользовательский объект как ключ в HashMap, ты должен переопределить два важных метода из класса Object:
hashCode()equals()Эти методы работают вместе, чтобы правильно управлять ключами:
hashCode() определяет бакет, в котором хранится пара ключ-значениеequals() проверяет, являются ли два ключа одинаковыми, когда возникают коллизии хешейКогда переопределяешь эти методы, соблюдай несколько важных правил:
equals(), они обязаны иметь одинаковый хеш-кодclass Person {
private String name;
private int age;
@Override
public int hashCode() {
return Objects.hash(name, age);
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null) return false;
if (getClass() != obj.getClass()) return false;
Person other = (Person) obj;
return name.equals(other.name) && age == other.age;
}
}
Без правильной реализации hashCode() и equals() твой HashMap может не найти ключи корректно, что приведёт к непредсказуемому поведению и потере данных. Всегда переопределяй оба метода вместе, когда используешь пользовательские объекты как ключи.
Если два объекта равны согласно equals(), они должны возвращать одно и то же значение из hashCode(), но объекты с одинаковым хешем не обязательно равны.
Новый — ещё не проверен сообществом
Вы