Основные понятия хеширования - PullRequest
1 голос
/ 26 января 2012

У меня очень простой вопрос. поверьте мне, я прочитал много книг, посмотрел видео, но не смог получить ответ. Предположим, у нас есть HashMap. У меня есть 3 (a, b, c) vales, которые отображаются на один и тот же хэш, a и b одинаковы, но c отличается. Если я добавлю только a и b в hastable, откуда hashMap узнает, что это НЕ коллизия.

Предположим, у нас есть Hashmap .... Теперь я вызываю put (obj1, "Test"), а затем помещаю (obj2, "Test") карту obj1 и obj2 в один и тот же ключ .... Можете ли вы сказать мне, что такое карта хеша? собирается хранить эти два звонка

Будут ли храниться реальные объекты? Если нет, как он при втором вызове решит, что это не коллизия, если obj1 и obj2 одинаковы.

Спасибо

Ответы [ 2 ]

0 голосов
/ 26 января 2012

Согласно Википедии:

В информатике хеш-таблица или хеш-карта - это структура данных, которая использует хеш-функцию для сопоставления идентифицирующих значений, известных как ключи (например, имя человека), к связанным с ним ценностям (например, их телефон число). Таким образом, хеш-таблица реализует ассоциативный массив.

Также Wiki назвал ассоциативный массив «абстрактным типом данных, состоящим из набора пар (ключ, значение)».

Так что да, хеш-таблица знает своих "арендаторов".

0 голосов
/ 26 января 2012

Большинство хеш-таблиц требуют двух бит поддержки от ваших объектов хранения - GetHashCode () и Equals ().

Если два объекта возвращают один и тот же GetHashCode (), но их сравнение с Equals () возвращает true, они представляют одни и те же данные и, следовательно, не являются коллизиями, просто дублируют записи.объекты возвращают один и тот же GetHashCode (), а их сравнение возвращает false, тогда Hashtable знает, что объекты представляют разные вещи, и, таким образом, рассматривает его как коллизию.

Именно поэтому во многих языках, таких как C #,Вы должны переопределить / реализовать GetHashCode () и Equals () в ваших объектах хранения.Если вы когда-либо реализуете эти методы так, что два объекта при сравнении с Equals () возвращают true, но возвращают разные значения из GetHashCode (), тогда у вас есть ошибка.

...