Назад к вопросам
Middle+
3
Какой контракт между hashCode и equals?
Компании, где спрашивали
Мираполис
Ответ от нейросети
sobes.tech AI
Контракт между hashCode() и equals() в Java требует:
- Если два объекта равны по методу
equals(), то у них должен быть одинаковыйhashCode(). - Если два объекта имеют одинаковый
hashCode(), это не обязательно означает, что они равны поequals()(коллизии возможны). - Метод
hashCode()должен возвращать одно и то же значение при многократных вызовах, пока объект не изменился.
Это важно для корректной работы коллекций, основанных на хешировании (например, HashMap, HashSet).
Пример:
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MyClass myClass = (MyClass) o;
return field.equals(myClass.field);
}
@Override
public int hashCode() {
return field.hashCode();
}