Существенным аспектом GetHashCode
является то, что наблюдение, что хеш-коды двух объектов различаются, представляет собой не только наблюдение, что объекты различаются, но и наблюдение чего-то гораздо более мощного: если хеш-коды всех элементов в одном набореиметь свойство, которого нет у всех объектов в другом, тогда у наборов нет общих элементов.
Например, если положить в один набор все объекты, где GetHashCode
возвращает четное число, и вдругой набор всех объектов, где GetHashCode
возвращает нечетное число, а затем предоставляется объект для поиска, вызов GetHashCode
позволит немедленно исключить из рассмотрения все объекты в одном из наборов.Если бы вместо двух наборов один использовал двадцать, один мог бы исключить все из девятнадцати наборов.Если 256 наборов, можно исключить 255. Во многих случаях, если настроить количество наборов на основе количества предметов, которые у него есть, можно будет исключить все объекты, кроме нескольких объектов, не глядя на любой из них.
Просмотр хеш-кодов двух объектов, чтобы увидеть, могут ли они быть равными, редко будет быстрее, чем простая проверка объектов непосредственно на равенство.С другой стороны, способность знать, что один объект не равен 999 990 другим, не глядя на них, может оказаться намного быстрее, чем смотреть на, независимо от того, как быстро было бы сравнение равенства.