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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top