2010-03-16 5 views
12

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

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

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

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

ответ

14

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

+1

Отлично - это именно то, что я надеялся, что это так - MSDN просто не делает этого ясно из документации – RobV