Является ли расчет уникальности .Net HashSet полностью на основе хэш-кодов? - PullRequest
12 голосов
/ 16 марта 2010

Мне было интересно, базируется ли .Net HashSet<T> полностью на хеш-кодах или же он использует равенство?

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

Я рассматриваю возможность использования HashSet для хранения некоторых экземпляров этого класса, и мне интересно, стоит ли это делать на самом деле - если уникальность элемента определяется только по его хэш-коду, тогда это бесполезно для реальных приложений *

Документация MSDN по этой теме выглядит довольно расплывчато. Любое просвещение приветствуется

1 Ответ

14 голосов
/ 16 марта 2010

Нет, он также использует равенство. По определению хеш-коды не должны быть уникальными - все, что предполагает, что они будут, сломано. HashSet<T> разумно. Он использует IEqualityComparer<T> (по умолчанию EqualityComparer<T>.Default) для выполнения генерации хеш-кода и проверки на равенство.

...