Методы Equals и Hashcode в Java
Это методы класса java.lang.Object, который является суперклассом всех классов (в том числе пользовательских классов и других, определенных в java API).
Реализация:
public boolean equals (Object obj)
public int hashCode ()
public boolean equals (Object obj)
Этот метод просто проверяет, ссылаются ли две ссылки на объекты x и y на один и тот же объект. то есть он проверяет, если x == y.
Это рефлексивно: для любого ссылочного значения x, x.equals (x) должно возвращать true.
Симметрично: для любых ссылочных значений x и y, x.equals (y) должен возвращать true тогда и только тогда, когда y.equals (x) возвращает true.
Это транзитивно: для любых ссылочных значений x, y и z, если x.equals (y) возвращает true и y.equals (z) возвращает true, тогда x.equals (z) должен вернуть true.
Согласовано: для любых ссылочных значений x и y множественные вызовы x.equals (y) последовательно возвращают true или последовательно возвращают false при условии, что никакая информация, используемая в сравнениях сравнения для объекта, не изменяется .
Для любого ненулевого ссылочного значения x, x.equals (null) должен возвращать
ложь.
public int hashCode ()
Этот метод возвращает значение хеш-кода для объекта, для которого этот метод вызывается. Этот метод возвращает значение хеш-кода в виде целого числа и поддерживается для использования классов коллекции на основе хеширования, таких как Hashtable, HashMap, HashSet и т. Д. Этот метод должен быть переопределен в каждом классе, который переопределяет метод equals.
Общий контракт hashCode:
Всякий раз, когда он вызывается для одного и того же объекта более одного раза во время выполнения приложения Java, метод hashCode должен последовательно возвращать одно и то же целое число при условии, что никакая информация, используемая в сравнениях сравнения для объекта, не изменяется.
Это целое число не обязательно должно быть согласованным при выполнении одного приложения другим исполнением того же приложения.
Если два объекта равны в соответствии с методом equals (Object), то вызов метода hashCode для каждого из двух объектов должен давать одинаковый целочисленный результат.
Не требуется, чтобы, если два объекта были неравны в соответствии с методом equals (java.lang.Object), то вызов метода hashCode для каждого из двух объектов должен приводить к разным целочисленным результатам. Тем не менее, программист должен знать, что выдача различных целочисленных результатов для неравных объектов может повысить производительность хеш-таблиц.
Равные объекты должны создавать один и тот же хэш-код, если они
равные, однако неравные объекты не должны создавать различные хэш-коды.
Ресурсы:
Javaranch
Изображение