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