Встречается на собеседованиях • сегодня

В чем заключается контракт между equals и hashCode

Контракт между equals и hashCode в Java состоит из следующих правил:

  1. Если два объекта равны по equals(), их hashCode() должен возвращать одинаковое значение.
  2. Обратное не обязательно: разные объекты могут иметь одинаковый хеш-код (коллизия).
  3. Если переопределяешь equals(), всегда переопределяй hashCode() для соблюдения контракта.

Пример нарушения контракта:

java
class Person {
    String name;
    
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Person)) return false;
        Person p = (Person) o;
        return name.equals(p.name);
    }
    // hashCode не переопределён - нарушение!
}

Правильная реализация:

java
@Override
public int hashCode() {
    return name.hashCode();
}

Нарушение контракта может привести к проблемам при использовании объектов в HashSet, HashMap и других хеш-коллекциях.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы