Объясните различия между методами equals() и hashCode() в Java и зачем они нужны вместе.
Answer from AI
sobes.tech AI
Методы equals() и hashCode() в Java связаны с сравнением объектов и их использованием в коллекциях.
-
equals()определяет, равны ли два объекта по смыслу (логически). По умолчанию в классеObjectсравнивает ссылки (т.е. одинаковые ли объекты в памяти), но обычно переопределяется для сравнения содержимого. -
hashCode()возвращает целочисленное значение — хэш-код объекта. Он используется, например, в хэш-таблицах (HashMap,HashSet) для быстрого поиска.
Важно, что если два объекта считаются равными по equals(), то у них должен быть одинаковый hashCode(). Это правило гарантирует корректную работу коллекций на основе хэширования.
Пример:
class Person {
String name;
int age;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Person)) return false;
Person p = (Person) o;
return age == p.age && name.equals(p.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
Здесь equals() сравнивает поля, а hashCode() возвращает хэш на основе тех же полей, что обеспечивает согласованность.