Was ist der Unterschied zwischen KeyValuePair und Hashtable in .NET?

8

Ich möchte die meine benutzerdefinierte Sammlung als Schlüssel und Value ist auch eine Sammlung von String-Liste.Ich kann dies mit KeyvaluePair und Hashtable erreichen. Was ist die am besten geeignete collction, die mir mehr Vorteile in Bezug auf die Flexibilität gibt?

    
Ashish Ashu 23.11.2009, 05:09
quelle

3 Antworten

14

Hashtable ist ein Direktzugriff und verwendet intern < a href="http://msdn.microsoft.com/en-us/library/system.collections.dictionaryentry(VS.71).aspx"> System.Collections.DictionaryEntry für seine Elemente aus .NET 1.1 ; während eine stark typisierte System.Collections.Generic.Dictionary in .NET 2.0 verwendet System.Collections.Generic. KeyValuePair Elemente und ist auch wahlfreier Zugriff.

(Hinweis: Diese Antwort ist bei der Bereitstellung von Beispielen für das .NET 2.0-Framework voreingenommen - deshalb wird KeyValuePair anstelle von DictionaryEntry fortgesetzt - die ursprüngliche Frage zeigt an, dass dies der gewünschte Typ ist, mit dem gearbeitet werden kann.)

Da KeyValuePair eine unabhängige Klasse ist, können Sie manuell eine Liste oder ein Array von KeyValuePair-Instanzen erstellen, auf eine Liste oder ein Array wird jedoch sequenziell zugegriffen. Dies steht im Gegensatz zu der Hashtable oder dem Dictionary, die intern ihre eigenen Elementinstanzen erstellen und auf die zufällig zugegriffen wird. Beide sind gültige Möglichkeiten, KeyValuePair-Instanzen zu verwenden. Siehe auch Informationen zu MSDN zum Auswählen einer zu verwendenden Auflistungsklasse . p>

Zusammenfassend: Der sequentielle Zugriff ist am schnellsten, wenn Sie eine kleine Menge von Elementen verwenden, während ein größerer Satz von Elementen von einem wahlfreien Zugriff profitiert.

Microsofts Hybridlösung : Eine interessante Spezialsammlung, die in .NET 1.1 eingeführt wurde, ist System.Collections .Specialized.HybridDictionary , das eine interne ListDictionary-Repräsentation verwendet (sequenziell zugegriffen), während die Sammlung klein ist, und dann automatisch auf eine Hashtable-interne Repräsentation umschaltet (nach dem Zufallsprinzip), wenn die Sammlung groß wird. "

C # Beispielcode

Die folgenden Beispiele zeigen dieselben Schlüssel-Wert-Paar-Instanzen, die für verschiedene Szenarien erstellt wurden - sequenzieller Zugriff (zwei Beispiele), gefolgt von einem Beispiel für einen wahlfreien Zugriff. Zur Vereinfachung wird in diesen Beispielen ein int-Schlüssel mit einem String-Wert verwendet - Sie können ihn in den Datentypen ersetzen, die Sie verwenden müssen.

Hier ist eine stark typisierte System.Collections.Generic.List von Schlüssel-Wert-Paaren.
(Sequenzieller Zugriff)

%Vor%

Hier ist ein System.Array von Schlüssel-Wert-Paaren.
(Sequenzieller Zugriff)

%Vor%

Hier ist ein Wörterbuch der Schlüssel-Wert-Paare.
(Zufälliger Zugriff)

%Vor%     
John K 13.01.2010, 08:02
quelle
2

Ein relevantes Bit ist, dass Hashtable eine .Net 1.1-Klasse ist, während KeyValuePair in .NET 2.0 eingeführt wurde. (mit der Einführung von Generika)

    
p.campbell 23.11.2009 05:12
quelle
2

Hashtable wurde erstellt, als C # noch keine Generics unterstützt hat.

    
Andrew Keith 23.11.2009 05:15
quelle

Tags und Links