Erhalte ein gleiches Objekt aus HashSetT in O (1)

8

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.

    
Virtlink 06.06.2012, 23:02
quelle

2 Antworten

7

Es gibt keine Methode für HashSet , die das tut, was Sie wollen.

Sie können stattdessen ein Dictionary verwenden:

%Vor%     
Mark Byers 06.06.2012, 23:07
quelle
1

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.

%Vor%     
user1111929 13.09.2012 22:22
quelle

Tags und Links