Senior
Μιλήστε για τις μεθόδους equals() και hashCode(), το συμβόλαιό τους και το ρόλο τους στο HashMap
sobes.tech AI
Απάντηση από 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.