2010-04-22 3 views
1

Может ли кто-нибудь дать хорошее объяснение и/или ссылки на хороший ресурс о том, как хэш-коды используются для хранения и извлечения объектов в хэш-таблицах, словарях и т. Д., В частности, в C# /. СЕТЬ.Хороший ресурс для объяснения того, как хэш-коды используются в коллекциях

Мне интересно видеть, как Equals и GetHashCode используются совместно при хранении и извлечении элементов.

ответ

1

Это зависит от коллекции, но для словаря хеш-код используется для определения того, к какому ведру добавляется объект, а Equals используется для поиска элемента в ведре, среди других предметов, которые могут иметь одинаковый хэш ,

+0

Не мог бы вы привести пример, когда два объекта будет иметь один и тот же хэш-код (и, следовательно, быть в том же ведре), но не считается равным с Равными? Ведро, что это значит? Области контейнера для группировки объектов внутри? – Michael

+0

@ Майкл: Конечно. Обратите внимание, что реализация GetHashCode() не указана и может теоретически изменяться между версиями .NET, но вы можете попробовать ее для этих двух строк: «zqhrehjt» и «ogjhvzfp». Я получаю '' zqhrehjt '.GetHashCode() == "ogjhvzfp" .GetHashCode() 'значение -1985547583 в обоих случаях. И вы правы, что объекты сгруппированы внутри контейнера. В идеале, хотя каждая группа должна содержать только один объект. Если объекты заканчиваются в одном ковше, это называется столкновением и может привести к низкой производительности. Если количество коллизий слишком велико, количество ведер увеличивается. –

+0

@Michael: Также обратите внимание, что два элемента могут оказаться в одном и том же ковше, даже если они имеют другой хеш-код, потому что количество ведер всегда меньше числа возможных хеш-кодов. Если количество ведер увеличивается, тогда они могут оказаться в разных ведрах. –

0

попробуйте object.GetHashCode.

«Хэш-код представляет собой числовое значение, которое используется для идентификации объекта во время тестирования равенства. Он может также служить в качестве индекса для объекта в коллекции. Метод GetHashCode подходит для использования в алгоритмах хэширования и структуры данных, такие как хеш-таблица ».