1228. Какая связь между hashCode() и equals()?
В Java hashCode() и equals() — это два метода, которые связаны со сравнением объектов и часто используются вместе. Метод equals() используется для проверки того, логически ли два объекта равны друг другу, а метод hashCode() используется для получения уникального целочисленного значения для объекта, которое можно использовать для идентификации объекта в HashMap или другом коллекции. В общем, при реализации метода equals() рекомендуется также реализовать метод hashCode(), чтобы два логически равных объекта имели одинаковый хеш-код. Причина этого в том, что метод equals() используется для проверки равенства двух объектов, а коллекции Java, такие как HashMap, используют хэш-код объекта для определения места его хранения. Таким образом, если два объекта равны, они должны иметь одинаковый хеш-код, а если они не равны, они могут иметь одинаковые или разные хеш-коды. Если вы переопределяете метод equals(), вы также должны переопределить метод hashCode(), чтобы гарантировать правильное поведение объектов. правильно в сборниках. Вот пример того, как реализовать эти методы в Java:
public class Person {
private String name;
private int age;
// constructor
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// equals() method
public boolean equals(Object obj) {
if (obj == this) return true;
if (!(obj instanceof Person)) return false;
Person person = (Person) obj;
return person.name.equals(name) && person.age == age;
}
// hashCode() method public int hashCode() {
int result = 17;
result = 31 * result + name.hashCode();
result = 31 * result + age;
return result;
}
}
В этом примере метод equals() проверяет, имеют ли два объекта Person одинаковое имя и возраст. Метод hashCode() вычисляет хеш-код на основе имени и возраста человека по формуле 31 * результат + field.hashCode(). Обратите внимание, что в этой формуле часто используется простое число 31, поскольку оно обеспечивает хорошее распределение хэш-кодов.