Мы должны переопределить методы equals () и hashcode (), чтобы вернуть одно и то же число для имени.
Ниже приведен контракт equals () и hashcode ():
См. JavaDocjava.lang.Object
В hashCode () говорится:
Если два объекта равны в соответствии с методом equals (Object), то вызов метода hashCode для каждого из двух объектов долженвыдает тот же целочисленный результат.
Если вы переопределяете только equals (), а не hashCode (), ваш класс нарушает этот контракт.
Это также сказано в JavaDoc метода equals ():
Обратите внимание, что обычно необходимо переопределять метод hashCode всякий раз, когда этот метод переопределяется, чтобы поддерживать общий контракт для метода hashCode, в котором говорится, что равные объекты должны иметь одинаковые хеш-коды.