Подтвердить что ты не робот

Является ли расчет уникальности NetHashSet полностью основанным на хэш-кодах?

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

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

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

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

4b9b3361

Ответ 1

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