Назад к вопросам
СБЕР
Senior
4
Расскажите про методы equals() и hashCode(), их контракт и роль в HashMap
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Метод equals() определяет, когда два объекта считаются равными по смыслу, а hashCode() возвращает целочисленное значение, используемое для быстрого поиска объекта в хэш-структурах.
Контракт между equals() и hashCode():
- Если два объекта равны по equals(), то у них должен быть одинаковый hashCode().
- Если hashCode() у объектов разный, то equals() обязательно вернёт false.
В HashMap hashCode() используется для определения корзины (bucket), где хранится объект, а equals() — для поиска точного совпадения ключа внутри корзины. Нарушение контракта приводит к неправильной работе коллекций, например, невозможности найти ключ.
Пример:
class Person {
String id;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Person)) return false;
Person p = (Person) o;
return id.equals(p.id);
}
@Override
public int hashCode() {
return id.hashCode();
}
}
Здесь объекты считаются равными, если у них одинаковый id, и hashCode() основан на id.