Значение ключа общего словарного класса - PullRequest
1 голос
/ 25 мая 2009

Как я знаю, в HashTable значение хеш-строки ключевой строки является уникальным, потому что если есть две одинаковые строки, функция GetHashCode () перезапишет первую со второй.

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

Но когда дело доходит до универсального словарного класса, мы можем указать любой тип в качестве параметра типа для ключа.

Таким образом, значение хеша, сгенерированное этим ключом, не может быть уникальным, поскольку оно не выполняет поведение строки. Это так?

Если нет, то какая процедура стоит за этим общим сценарием?

Заранее спасибо,

Jay ...

Ответы [ 2 ]

3 голосов
/ 25 мая 2009

Хеш используется только для помещения элементов в «корзины» в целях быстрого поиска. Значение хеша не используется для определения равенства.

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

1 голос
/ 25 мая 2009

Хеш-значение получается с помощью GetHashCode (), который реализует каждый объект. Реализация по умолчанию, унаследованная от System.Object, не гарантирует уникальных возвращаемых значений для разных объектов.

Однако хеш-значения не обязательно должны быть уникальными для объекта, поскольку они используются только для ускорения поиска, а вашему классу ключей все еще требуется реализация равенства, чтобы определить, равны ли ключи.

Так что, если вы используете System.Object в качестве ключа, он будет знать один ключ от другого на основе равенства ссылок, так как он будет использовать Object.Equals, чтобы выяснить это.

...