Basierend auf Hash -Codes basierend auf der Einzigartigkeitsberechnung von .NET Hashset?
-
20-09-2019 - |
Frage
Ich habe mich gefragt, ob das .NET HashSet<T>
basiert vollständig auf Hash -Codes oder ob es auch Gleichheit verwendet?
Ich habe eine bestimmte Klasse, die ich möglicherweise Millionen von Fällen instanziieren kann, und es besteht eine vernünftige Chance, dass einige Hash -Codes zu diesem Zeitpunkt kollidieren.
Ich denke darüber nach, einige Fälle dieser Klasse zu speichern, und frage mich, ob es sich wirklich lohnt - wenn die Einzigartigkeit eines Elements nur in seinem Hash -Code bestimmt wird, dann ist dies für mich für echte Anwendungen kein Nutzen
Die MSDN -Dokumentation scheint in diesem Thema ziemlich vage zu sein - jede Erleuchtung wäre geschätzt
Lösung
Nein, es verwendet auch Gleichheit. Per Definition müssen Hash -Codes nicht einzigartig sein - alles, was davon ausgeht, dass sie sein werden, ist gebrochen. HashSet<T>
ist vernünftig. Es verwendet ein IEqualityComparer<T>
(Verfall zu EqualityComparer<T>.Default
) sowohl Hash -Code -Generierung als auch Gleichstellungstests durchzuführen.