A HashSet<T>
kann in O (1) bestimmen, ob es einen bestimmten Artikel enthält. Wenn ich Equals()
und GetHashCode()
für meine benutzerdefinierte Klasse überschreibe, kann ich ein Objekt A und ein anderes Objekt A 'haben, die nicht sind, aber für das Equals()
true
zurückgibt GetHashCode()
gibt denselben Hashcode zurück.
Nun, da A im Hash-Satz ist, möchte ich A in O (1) erhalten, gegeben mit A '(was aus der Perspektive des Hash-Satzes gleich A ist).
%Vor%Wie geht das?
( dies hat nicht die Antwort, nach der ich suche, und dieser hat überhaupt keine Antworten.)
Einige Hintergrundinformationen: Ich möchte den Satz zu intern meine eigenen Objekte auf die gleiche Weise verwenden C # Praktikanten Strings: gleiche Objekte brauchen nur eine Instanz. Auf diese Weise kann ich Metadaten an ein solches Objekt anhängen und sicherstellen, dass es ohne diese Metadaten keine andere Instanz gibt.
Es gibt keine Methode für HashSet
, die das tut, was Sie wollen.
Sie können stattdessen ein Dictionary
verwenden:
Wenn ich mich richtig erinnere, hat Dictionary
keine konstanten Zeitimplementierungen der grundlegenden Mengenoperationen, während HashSet
hat. Hier ist eine Möglichkeit, es mit konstanter zeitgleicher Suche zu implementieren, ohne andere Komplexitäten von HashSet zu erhöhen. Es ist wichtig, diesen Ansatz zu verwenden, wenn Sie viele zufällige Elemente greifen müssen. Was ich unten schreibe ist Java-Syntax, da ich C # nicht kenne, aber die Idee ist sprachunabhängig.