Какова цель метода hashcode в java?
Когда у нас есть методы equals()
, compareTo()
, почему в Java существует метод hashcode()
?
И если мы используем HashTable
, мы должны переопределить метод hashcode()
. Есть ли какая-либо особая причина, кроме быстрого доступа к случайным ключам? Если мы переопределим метод hashcode()
, какова будет вероятная реализация?
Как Java гарантирует уникальность объекта в памяти?
Hashcodes are typically used to enhance the performance of large collections of data
.
В hashing
вычисляем hash code
. это дополнительная задача. Когда мы выполняем дополнительную операцию для каждого объекта, который добавляется в коллекцию. Как улучшается производительность?
Ответы
Ответ 1
Вы всегда должны переопределять equals
и hashCode
в тандеме, чтобы удовлетворить их взаимозависимые контракты. Класс, который их реализует противоречиво, просто разбит и неприемлем даже при минимальных стандартах разработки программного обеспечения.
Что касается того, почему бы никогда не использовать структуру данных хеш-таблицы: поскольку это самый быстрый вариант для хранения значений ключа с произвольным доступом.
Ответ 2
Проверьте следующее Ссылка, чтобы понять, почему используется хеширование
1: http://java.dzone.com/articles/java-hashing и следующие Ссылка также поможет вам.
Ответ 3
Используя метод compareTo
, вы устанавливаете "total order" для своих объектов. Полный порядок является довольно слабым свойством: он может только сказать вам, если один объект "меньше" другого, но он не дает вам понятия "насколько далеко друг от друга" есть два объекта.
Например, если у вас есть N объектов в структуре данных с ключом, и вы хотите найти значение для данного ключа. Имея только общий порядок, вам нужно сравнить не менее O (log N), чтобы найти соответствующий ключ.
Хэш-код является более сильным, потому что он может сказать вам, что два объекта несколько похожи или совершенно разные. Благодаря этому хэш-таблица может найти значение для ключа с операциями O (1).
Ответ 4
why there is a hashcode() method in Java?
В принципе, всякий раз, когда мы вставляем уникальную структуру данных, структура данных следит за тем, чтобы не был вставлен дублирующий объект. Как это сделать?
Это выполняется по контракту, который реализуют объекты, hashcode()
, что уникальный идентификатор как SSN человека. Но если вы хотите получить конкретный объект, тогда угадайте, что должно быть вызвано после сопоставления SSN, да, вы правильно догадались, что это equals()
.