Почему мне нужно переопределить методы equals и hashCode в Java?
В Java каждый объект имеет доступ к методу equals(), поскольку он наследуется от класса Object. Если два объекта равны в соответствии с методом equals (Object), то вызов метода hashCode для каждого из двух объектов должен давать одинаковый целочисленный результат. Вы должны переопределить hashCode() в каждом классе, который переопределяет equals(). Несоблюдение этого требования приведет к нарушению общего договора для Object.hashCode(), что предотвратит правильное функционирование вашего класса в сочетании со всеми коллекциями на основе хэшей, включая HashMap, HashSet и Hashtable. Если вы не переопределите hashcode(), то реализация по умолчанию в классе Object будет использоваться коллекциями. Эта реализация дает разные значения для разных объектов, даже если они равны в соответствии с методом equals().
hashCode()()
Метод hashcode() возвращает метод хэш-кода для этой строки. HashCode() используется для bucketing в реализациях Hash, таких как HashMap, HashTable, HashSet и т. Д. Значение, полученное от hashCode(), используется как номер ведра для хранения элементов набора / карты. Этот номер ведра является адресом элемента внутри набора / карты.
equals()
Этот конкретный метод используется для обеспечения равного сравнения между двумя объектами. В Java существует два типа сравнений. Один использует оператор «==», а другой - «equals()».