Взаимосвязь контрактов методов equals и hashCode заключается в следующем:
equals, то они должны возвращать одинаковое значение хеш-кода при вызове метода hashCode для каждого из них.equals. Возможно коллизия хешей.equals.Этот контракт важен при использовании объектов в коллекциях, основанных на хешировании, таких как HashSet, HashMap, HashTable.
HashSet или в качестве ключа в HashMap, сначала вычисляется его хеш-код для быстрого доступа к соответствующей "корзине".equals используется для точного определения, является ли добавляемый объект равным какому-либо из существующих.Нарушение контракта (например, переопределение equals без соответствующего переопределения hashCode) может привести к некорректной работе таких коллекций:
equals), могут попадать в разные корзины (из-за разных hashCode) и, как следствие, одна и та же логически сущность может присутствовать несколько раз в HashSet или HashMap будет содержать несколько пар с логически одинаковыми ключами.contains или get.Правильная реализация этих методов гарантирует, что если два объекта считаются равными, они будут помещены в (или находиться в) одной и той же хеш-корзине, и equals подтвердит их равенство после нахождения в этой корзине.