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