2010-03-16 1 views
12

Ich frage mich, ob das. NET HashSet<T> vollständig auf Hash-Codes basiert oder ob es auch Gleichheit verwendet?Ist die Eindeutigkeitsberechnung für .Net HashSets vollständig auf Hash Codes basiert?

Ich habe eine bestimmte Klasse, die möglicherweise Millionen von Instanzen von instanziieren kann und es gibt eine vernünftige Chance, dass einige Hash-Codes zu diesem Zeitpunkt kollidieren werden.

Ich überlege, HashSet's zu verwenden, um einige Instanzen dieser Klasse zu speichern und frage mich, ob es wirklich lohnt - wenn die Einzigartigkeit eines Elements nur auf seinem Hash-Code bestimmt wird, dann nützt es mir für echte Anwendungen

MSDN Dokumentation scheint zu diesem Thema ziemlich vage zu sein - jede Erleuchtung würde geschätzt werden

Antwort

14

Nein, es verwendet Gleichheit auch. Hash-Codes müssen definitionsgemäß nicht eindeutig sein - alles, was davon ausgeht, dass sie gebrochen werden. HashSet<T> ist sinnvoll. Er verwendet IEqualityComparer<T> (standardmäßig EqualityComparer<T>.Default), um Hashcode-Generierungs- und Gleichheitsprüfungen durchzuführen.

+1

Großartig - das ist genau das, was ich mir erhofft habe - MSDN schafft es einfach nicht, dies in der Dokumentation zu verdeutlichen – RobV

Verwandte Themen