Какова цель метода 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 в тандеме, чтобы удовлетворить их взаимозависимые контракты. Класс, который их реализует противоречиво, просто разбит и неприемлем даже при минимальных стандартах разработки программного обеспечения.

Что касается того, почему бы никогда не использовать структуру данных хеш-таблицы: поскольку это самый быстрый вариант для хранения значений ключа с произвольным доступом.

Ответ 3

Используя метод compareTo, вы устанавливаете "total order" для своих объектов. Полный порядок является довольно слабым свойством: он может только сказать вам, если один объект "меньше" другого, но он не дает вам понятия "насколько далеко друг от друга" есть два объекта.

Например, если у вас есть N объектов в структуре данных с ключом, и вы хотите найти значение для данного ключа. Имея только общий порядок, вам нужно сравнить не менее O (log N), чтобы найти соответствующий ключ.

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

Ответ 4

why there is a hashcode() method in Java?

В принципе, всякий раз, когда мы вставляем уникальную структуру данных, структура данных следит за тем, чтобы не был вставлен дублирующий объект. Как это сделать?
Это выполняется по контракту, который реализуют объекты, hashcode(), что уникальный идентификатор как SSN человека. Но если вы хотите получить конкретный объект, тогда угадайте, что должно быть вызвано после сопоставления SSN, да, вы правильно догадались, что это equals().