Является ли расчет уникальности хешса .NET полностью основанным на хэш -кодах?
-
20-09-2019 - |
Вопрос
Мне было интересно, есть ли .net HashSet<T>
Основается полностью на хэш -кодах или также использует ли он равенство?
У меня есть конкретный класс, который я могу потенциально создавать миллионы случаев, и есть разумная вероятность того, что некоторые хеш -коды будут столкнуться в этот момент.
Я рассматриваю возможность использования хешет для хранения некоторых экземпляров этого класса, и мне интересно, стоит ли это сделать - если уникальность элемента определяется только на его хэш -коде, то это бесполезно для меня для реальных приложений
Документация MSDN, кажется, довольно расплывчата по этой теме - любое просветление будет оценено
Решение
Нет, он также использует равенство. По определению, хэш -коды не должны быть уникальными - все, что предполагает, что они будут сломаны. HashSet<T>
разумно. Он использует IEqualityComparer<T>
(дефолт на EqualityComparer<T>.Default
) для выполнения как генерации хэш -кода, так и тестов на равенство.