Назад к вопросам
Junior — Middle
66
Как связан метод equals с методом hashCode в контракте Java, и почему это важно для правильной работы коллекций?
Ответ от нейросети
sobes.tech AI
В Java существует важный контракт между методами equals и hashCode: если два объекта считаются равными методом equals, то у них должен быть одинаковый hashCode. Это правило необходимо для корректной работы коллекций, основанных на хешировании, таких как HashMap, HashSet.
Если нарушить этот контракт, например, два равных объекта имеют разные хеш-коды, то коллекции могут работать некорректно — объект может не найтись в хеш-таблице, даже если он там есть.
Пример:
class Person {
private String name;
private int id;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return id == person.id && name.equals(person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, id);
}
}
Здесь equals и hashCode согласованы: если два объекта Person равны, то и хеш-коды совпадут.