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