Каково использование hashCode в Java?

В Java obj.hashCode() возвращает некоторое значение. Каково использование этого хеш-кода в программировании?

hashCode() используется для bucketing в реализациях Hash таких как HashMap , HashTable , HashSet и т. д.

Значение, полученное из hashCode() , используется как номер ведра для хранения элементов набора / карты. Этот номер ведра является адресом элемента внутри набора / карты.

Когда вы делаете contains() он принимает хеш-код элемента, а затем ищет ведро, на которое указывает хеш-код. Если в одном и том же ведре найдено более одного элемента (у нескольких объектов может быть один и тот же hash-код), то он использует метод equals() для оценки того, являются ли объекты равными, а затем принимает решение, если contains() является истинным или ложным, или решить, можно ли добавить элемент в набор или нет.

Из Джавадока :

Возвращает значение hash-кода для объекта. Этот метод поддерживается в интересах hash-таблиц, таких как предоставленные java.util.Hashtable .

Общий контракт hashCode :

  • Всякий раз, когда он вызывается на одном и том же объекте более одного раза во время выполнения приложения Java, метод hashCode должен последовательно возвращать одно и то же целое число , если информация, используемая при равных сравнениях на объекте, не изменяется. Это целое число не должно оставаться согласованным с одним исполнением приложения на другое выполнение одного и того же приложения.

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

  • Не требуется, чтобы, если два объекта неравны в соответствии с методом equals(java.lang.Object) , то вызов метода hashCode для каждого из двух объектов должен производить различные целочисленные результаты. Тем не менее, программист должен знать, что получение отдельных целочисленных результатов для неравных объектов может улучшить производительность хеш-таблиц.

Насколько это разумно практично, метод hashCode, определенный classом Object, возвращает разные целые числа для разных объектов. (Обычно это выполняется путем преобразования внутреннего адреса объекта в целое число , но этот метод реализации не требуется языком программирования Java).

Значение, возвращаемое hashCode() является хеш-кодом объекта, который является адресом памяти объекта в шестнадцатеричном формате.

По определению, если два объекта равны, их hash-код также должен быть равен. Если вы переопределите метод equals() , вы измените способ приравнивания двух объектов, а реализация hashCode() объекта больше недействительна. Поэтому, если вы переопределите метод equals (), вы также должны переопределить метод hashCode() .

Этот ответ из официальной документации по учебному курсу java SE 8

Хотя hashcode ничего не делает с вашей бизнес-логикой, мы должны позаботиться об этом в большинстве случаев. Потому что, когда ваш объект помещается в контейнер hash (HashSet, HashMap …), контейнер ставит / получает hash-код элемента.

hashCode() – это функция, которая принимает объект и выводит числовое значение. Хэш-код для объекта всегда одинаковый, если объект не изменяется.

Такие функции, как HashMap , HashTable , HashSet и т. Д., HashSet должны хранить объекты, будут использовать hashCode по размеру своего внутреннего массива для выбора в том, что «позиция памяти» (то есть позиция массива) для хранения объекта.

Бывают случаи, когда могут возникать столкновения (два объекта в конечном итоге имеют один и тот же hash-код), и это, конечно же, необходимо тщательно решить.

Hashcode – уникальный код, который генерируется JVM для каждого создания объекта. Мы используем hashcode для выполнения некоторой операции с хеширующими алгоритмами, такими как hashtable, hashmap и т. Д. Преимущества hashcode заключается в том, что он упрощает поиск в bcoz при поиске объект, который уникальный код помогает узнать, что obj. Но мы не можем сказать, что hashcode является адресом obj. Это уникальный код, созданный JVM для каждого объекта. Это теперь алгоритм hashирования дня. Z самый популярный алгоритм поиска.

Метод hashCode для данного classа может использоваться для проверки на предметное неравенство, но НЕ для равномерного classа для этого classа.

Метод hashCode используется classом коллекции java.util.HashSet для группировки элементов внутри этого набора в hash-ведра для быстрого поиска.

  • Найти, где class java загружен из
  • java.net.ConnectException: соединение отклонено
  • Почему StringTokenizer устарел?
  • Java: массив примитивных типов данных не автобокс
  • Как я могу использовать указатели в Java?
  • Почему InetAddress.isReachable возвращает false, когда я могу выполнить ping IP-адрес?
  • Oozie: Launch Map-Reduce от Oozie action?
  • Как я могу выполнить умножение без оператора '*'?
  • Аутентификация пользователя на службе Джерси REST
  • Могу ли я умножить строки на Java для повторения последовательностей?
  • Regex: что такое InCombiningDiacriticalMarks?
  • Давайте будем гением компьютера.