Как работает метод hashCode () Java?

Java.lang.Object имеет методы, называемые hasCode(), и эти методы играют значительную роль в приложении реального времени. Объект hashCode() Object фактически является нативным методом, и реализация на самом деле не в чистой Java. Если посмотреть на источник Object Class, вы можете увидеть следующий код для hashCode.

 
public native int hashCode();

Это указывает на то, что hashCode - это собственная реализация, которая в определенной степени обеспечивает адрес памяти. Однако можно переопределить метод hashCode в вашем классе реализации. Родные методы являются либо внутренними, либо написанными за пределами Java в «родном» коде, то есть конкретным для данного компьютера.

Java не создает значимого хэш-кода для вас, это ваша работа как разработчик для создания полезного хэш-кода. Однако Object генерирует HashCode на основе адреса памяти экземпляра объекта. Большинство классов (особенно Collection API) должны реализовывать собственный HashCode (а по контракту - собственный метод equals). Значение, возвращаемое hashCode(), никоим образом не гарантируется как адрес памяти объекта. Согласно Java API, вычисление hashcode основано на 32-битном внутреннем адресе JVM (Java Virtual Machine) объекта. Верно, что объект перемещается во время выполнения. Но hashcode не меняется.

Пример

 
Student student1 = new Student();
person1.setName("John");
Student student2 = new Student();
person2.setName("Doe");
Student student3 = student2;

В приведенном выше случае student1.hashCode не будет равен student2.hashCode, потому что адреса памяти этих двух объектов не совпадают. Но student2.hashCode будет равен student3, потому что они указывают на один и тот же объект. Поэтому, если вам нужно использовать метод hashCode для ваших объектов, вы должны реализовать его самостоятельно.

Метод HashCode и Equals в Java

В Java каждый объект имеет доступ к методу equals(), поскольку он наследуется от класса Object. Если два объекта равны в соответствии с методом equals (Object), то вызов метода hashCode для каждого из двух объектов должен давать одинаковый целочисленный результат. Вы должны переопределить hashCode() в каждом классе, который переопределяет equals(). Подробнее о .... Метод HashCode и Equals

Источник: http://net-informations.com/Java/cJava/hash.htm

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector