Le calcul est unique .Net HashSet entièrement basé sur des codes de hachage?
-
20-09-2019 - |
Question
Je me demandais si le HashSet<T>
.Net est entièrement basée sur les codes de hachage ou si elle utilise l'égalité ainsi?
J'ai une classe particulière que je potentiellement instancier des millions de cas de et il y a une chance raisonnable que certains codes de hachage entrent en collision à ce moment-là.
J'envisage d'utiliser HashSet de stocker des instances de cette classe et je me demande si elle est en fait la peine de faire - si l'unicité d'un élément est déterminé uniquement sur son code de hachage alors c'est d'aucune utilité pour moi applications réelles
documentation MSDN semble être assez vague sur ce sujet - une illumination serait appréciée
La solution
Non, il utilise l'égalité aussi bien. Par définition, les codes de hachage ne doivent pas nécessairement être unique - tout ce qui suppose qu'ils seront est cassé. HashSet<T>
est sensible. Il utilise un IEqualityComparer<T>
(par défaut à EqualityComparer<T>.Default
) pour effectuer les deux génération de code de hachage et des tests égalité.