Wie wird das Wörterbuch intern gepflegt?

8

Wenn ich sage

%Vor%

ist äquivalent zu zwei verschiedenen Arrays wie:

%Vor%     
user193276 21.10.2009, 12:49
quelle

4 Antworten

5

Das ist nicht zu weit weg. Beim Betrachten des Quellcodes in Reflector werden drei interne Sammlungen verwendet:

%Vor%

Beachten Sie, dass es auch eine int[] buckets Variable gibt, um die Buckets zu verwalten, die in der Fall von Hash-Code-Kollisionen.

Die Zwecke dieser Variablen sollten alle ziemlich selbsterklärend sein. Dies ist jedoch nicht besonders überraschend, da die Klasse Dictionary bekannt und dokumentiert ist, um (idealerweise mit einem Element pro Bucket) O(1) Nachschlagezeit bereitzustellen.

    
Noldorin 21.10.2009, 12:54
quelle
3

Es ist Hashtable. Für jeden Schlüssel berechnet das Dictionary seinen Hash-Code und verwendet diesen als Zeiger, an dem sich der Wert befinden soll. Wenn es zwei Schlüssel gibt, die mit dem gleichen Hash-Code übereinstimmen, wird eine solche Situation Kollision genannt, und intern wird für diesen Spezialfall das Dictionary einen Binärbaum verwendet.

Algorithmische Komplexität des Dictionary (Hashtable) ist O (1) und im schlimmsten Fall O (Log (N)) (Worst Case bedeutet, dass wir nur mit Kollisionen arbeiten), wobei N eine Anzahl von Elementen im Dictionary ist.

    
Vitaliy Liptchinsky 21.10.2009 12:55
quelle
2

Es ist alles klar auf MSDN geschrieben:

  

Die generische Klasse Dictionary (Of TKey, TValue) bietet eine Zuordnung von einer Menge von Schlüsseln zu einer Menge von Werten. Jeder Zusatz zum Wörterbuch besteht aus einem Wert und dem zugehörigen Schlüssel. Das Abrufen eines Werts mithilfe seines Schlüssels ist sehr schnell und liegt nahe an O (1), da die Dictionary-Klasse (Of TKey, TValue) als Hashtabelle implementiert ist.

    
Bolek Tekielski 21.10.2009 12:54
quelle
1

Nein, es ist eine Hash-Tabelle. Nun, es ist nicht genau eine Hash-Tabelle, aber es ist sehr eng verwandt.

Ссылка .

Ссылка

    
kemiller2002 21.10.2009 12:51
quelle

Tags und Links