В Java obj.hashcode()
возвращает некоторое значение. Каково использование этого хеш-кода в программировании?Что такое использование hashcode в Java?
ответ
От Javadoc:
Возвращает значение хэш-кода для объекта. Этот метод поддерживается в интересах хеш-таблиц, таких как предоставленные java.util.Hashtable
.
Общий договор hashCode
является:
Всякий раз, когда он вызывается на одном объекте более чем один раз в ходе выполнения приложения Java, метод
hashCode
должен последовательно возвращать же число, при условии никакая информация, используемая при равных сравнениях с объектом, не изменяется. Это целое число не должно оставаться согласованным с одним исполнением приложения на другое выполнение одного и того же приложения.Если два объекта равны в соответствии с методом
equals(Object)
, то вызов методаhashCode
на каждом из двух объектов должен давать одинаковый целочисленный результат.Это не требуется, если два объекта неравны согласно
equals(java.lang.Object)
методу, затем вызываяhashCode
метод на каждом из двух объектов должен производить различные результаты целочисленные. Тем не менее, программист должен знать, что получение отдельных целочисленных результатов для неравных объектов может улучшить производительность хеш-таблиц.
Насколько полезен практический метод, метод hashCode, определенный классом Object, возвращает различные целые числа для отдельных объектов. (Обычно это реализуется , преобразуя внутренний адрес объекта в целое число, но эта технология реализации не требуется языком программирования Java.)
Хотя hashcode ничего не делает с вашей бизнес-логикой, мы должны принять заботиться об этом в большинстве случаев. Потому что, когда ваш объект помещается в контейнер хэш (HashSet, HashMap ...), контейнер ставит/получает хэш-код элемента.
hashCode()
используются для bucketing в Hash
реализации, как HashMap
, HashTable
, HashSet
и т.д.
Значения полученного от hashCode()
используются в качестве ковша числа для хранения элементов множества/карты. Этот номер ведра - это адрес элемента внутри набора/карты.
Когда вы сделаете , он примет хеш-код элемента, а затем найдите ведро, на котором указывает хеш-код. Если в одном и том же ведре найдено более одного элемента (у нескольких объектов может быть один и тот же хэш-код), то он использует метод equals()
для оценки того, являются ли эти объекты равными, а затем принимает решение, является ли значение истинным или ложным, или решить, может быть добавлен в набор или нет.
Привет, приятель. Очень приятный ответ, но я нашел очень интересную ссылку для этого же с понятным практическим примером: http://www.coderanch.com/t/321515/java/java/HashCode – Logicalj
Спасибо Aishu. Теперь я получил четкое представление о hashcode с объяснением, связанным с ведром. – Balasubramani
", если в том же ведре найдено более 1 элемента, тогда он использует' equals() 'для оценки", так что, если найден только один найденный элемент хеш-кода, он возвращает true напрямую? но поскольку ** несколько объектов могут иметь один и тот же хэш-код **, поэтому он должен запускать 'equals()' для оценки того, равен ли совпадающий элемент, иначе он может дать вам неожиданный результат, правильно? –
A hashcode()
- это функция, которая принимает объект и выводит числовое значение.Хэш-код для объекта всегда одинаковый, если объект не изменяется.
функции, такие как HashMap
, HashTable
, HashSet
, и т.д., которые необходимо хранить объекты, будет использовать hashcode
по модулю размера их внутреннего массива, чтобы выбрать в том, что «положение памяти» (то есть позиция массива) для хранения объекта.
В некоторых случаях могут возникать столкновения (два объекта имеют один и тот же хэш-код, и это, разумеется, необходимо тщательно решить).
Метод hashCode для данного класса может использоваться для теста для объектного неравенства, но НЕ равенство объекта для этого класса.
Метод hashCode используется классом коллекции java.util.HashSet для группировки элементов внутри этого набора в хэш-ведра для быстрого поиска.
Нет, не может. Два неравных объекта могут иметь один и тот же хэш-код, поэтому использование хеш-кодов для проверки неравенства даст ложные срабатывания. –
@PranavMadhani - предлагаю либо исправить или удалить этот ответ ... – Krease
Hashcode - это уникальный код, который генерируется JVM для каждого создания объекта. Мы используем hashcode для выполнения некоторой операции с хэшированием, связанным с алгоритмом, таким как хеш-таблица, hashmap и т. Д. Преимущества хэш-кода - это упрощает поиск операции bcoz когда мы ищем объект, который уникальный код помогает узнать, что obj. Но мы не можем сказать, что hashcode является адресом obj. Это г уникальный код, генерируемый JVM для у каждого object..that теперь день алгоритм хэширования Z самым популярным алгоритмом поиска
значение, возвращенное
hashCode()
является хэш-код объекта, который является адресом памяти объекта в шестнадцатеричном формате.По определению, если два объекта равны, их хэш-код также должен быть равен. Если вы переопределите метод
equals()
, вы измените способ приравнивания двух объектов, а реализация объектаhashCode()
больше не действительна. Поэтому, если вы переопределите метод equals(), вы также должны переопределить методhashCode()
.
This answer is from the java SE 8 official tutorial documentation
- 1. Что такое hashCode AtomicBoolean?
- 2. Что такое использование? в java
- 3. Что такое HashCode для встроенных предикатов?
- 4. Что такое temp и что такое использование temp в java?
- 5. Что такое использование интерфейсов маркеров в Java?
- 6. Что такое фактическое использование дерева в Java
- 7. Что такое использование AccessibleContext в Java Swing?
- 8. Что такое использование байтового кода в java
- 9. Что такое использование {} блока в Java
- 10. Что такое использование var-args в Java?
- 11. Что такое использование объекта в Java?
- 12. Что такое использование потока символов в java?
- 13. Что такое использование типажей в Java
- 14. Что такое хэш-код объекта, если hashCode() не переопределен?
- 15. Что такое ярлык для автоматического генерации hashcode() и equals()?
- 16. Что такое использование архитектуры java-коннектора?
- 17. Что такое Java Java Bean?
- 18. Что такое реализация Scala для Hashcode для объектов типа Any?
- 19. Что такое использование виртуального метода Java-активации?
- 20. Что такое использование/преимущества Java InitialDirContext()?
- 21. Что такое встроенная реализация в Java?
- 22. реализация hashCode в java
- 23. Hashcode в Java
- 24. Java hashcode() strings collision
- 25. Что такое использование Robot framework?
- 26. Что такое использование пустоты?
- 27. Что такое использование asList?
- 28. Что такое использование Blend,
- 29. Что такое использование intptr_t?
- 30. Что такое использование plist?
Этот вопрос добавляет еще некоторые детали. http://stackoverflow.com/questions/18078779/what-is-the-purpose-of-hashcode-method-in-java – MaheshVarma
приятное объяснение, данное на этом post.http: //eclipsesource.com/blogs/ 2012/09/04/the-3-things-you-should-know-about-hashcode/ – vsvankhede