O cálculo da singularidade do hashset .NET é completamente baseado nos códigos de hash?
-
20-09-2019 - |
Pergunta
Eu queria saber se o .net HashSet<T>
baseia -se completamente nos códigos de hash ou se também usa igualdade?
Eu tenho uma classe específica de que posso instanciar milhões de instâncias e há uma chance razoável de que alguns códigos de hash colidam nesse ponto.
Estou pensando em usar o hashset para armazenar algumas instâncias dessa aula e estou me perguntando se vale a pena fazer - se a singularidade de um elemento só é determinada em seu código de hash, então isso não usa aplicações reais para aplicações reais
A documentação do MSDN parece ser bastante vaga sobre esse tópico - qualquer iluminação seria apreciada
Solução
Não, ele também usa igualdade. Por definição, os códigos de hash não precisam ser únicos - qualquer coisa que assume que eles estarão é quebrada. HashSet<T>
é sensato. Ele usa um IEqualityComparer<T>
(inadimplente para EqualityComparer<T>.Default
) realizar testes de geração de código de hash e igualdade.