Ich versuche herauszufinden, wann und warum ein Wörterbuch oder eine HashTable verwendet werden soll. Ich habe hier ein bisschen gesucht und Leute gefunden, die über die allgemeinen Vorteile des Wörterbuchs sprechen, denen ich voll und ganz zustimme, was den Box- und Unboxing-Vorteil für einen leichten Leistungsgewinn führt.
Aber ich habe auch gelesen, dass das Wörterbuch die Objekte nicht immer in der Reihenfolge zurückgibt, in der sie eingefügt wurden, sondern sortiert ist. Wo als HashTable wird. Soweit ich weiß, führt dies dazu, dass die HashTable in einigen Situationen viel schneller ist.
Meine Frage ist wirklich, wie könnten diese Situationen sein? Bin ich in meinen obigen Annahmen einfach falsch? Welche Situationen könnten Sie verwenden, um eine über die andere zu wählen (ja, die letzte ist etwas mehrdeutig).
Antworten:
System.Collections.Generic.Dictionary<TKey, TValue>
undSystem.Collections.Hashtable
Klassen pflegen beide intern eine Hash-Tabellendatenstruktur. Keiner von ihnen garantiert die Beibehaltung der Reihenfolge der Artikel.Abgesehen von Box- / Unboxing-Problemen sollten sie die meiste Zeit eine sehr ähnliche Leistung haben.
Der primäre strukturelle Unterschied zwischen ihnen ist , dass
Dictionary
beruht auf Verkettungs zu lösen Kollisionen während (eine Liste von Elementen für jede Hashtabelle bucket Aufrechterhaltung)Hashtable
Verwendungen Wiederkäuen für eine Kollisionsauflösung (wenn eine Kollision auftritt, versucht eine andere Hash - Funktion den Schlüssel zu einem Eimer zur Karte) .Die Verwendung von
Hashtable
Klassen bietet wenig Vorteile, wenn Sie auf .NET Framework 2.0+ abzielen. Es ist effektiv obsolet vonDictionary<TKey, TValue>
.quelle
Hashtable
. In Hash-Tabellen werden 3 Informationen in einem Eintrag gespeichert: Schlüssel-Hash, Schlüssel selbst und der Wert. Bei Elementen mit gleichem Hash muss die Liste durchlaufen werden, um das Element mit gleichem Schlüssel zu finden und seinen Wert zurückzugeben. Dies gilt auch fürHashtable
. Als Entwickler, der einDictionary
normales System verwendet, müssen Sie sich darüber keine Sorgen machen.Ich denke, es bedeutet dir jetzt nichts. Aber nur als Referenz für Leute, die vorbeischauen
Leistungstest - SortedList vs. SortedDictionary vs. Dictionary vs. Hashtable
Speicherzuweisung:
Zeit zum Einfügen:
Zeit für die Suche nach einem Artikel:
quelle
Unterschiede zwischen Hashtable und Dictionary
Wörterbuch:
Hash-tabelle:
quelle
Ein weiterer wichtiger Unterschied besteht darin, dass der Hashtable-Typ mehrere Leser und einen einzelnen Schreiber gleichzeitig sperrfrei unterstützt, Dictionary jedoch nicht.
quelle
Link: http://msdn.microsoft.com/en-us/library/4yh14awz(v=vs.90).aspx
quelle
Beide sind praktisch dieselbe Klasse (Sie können sich die Demontage ansehen). HashTable wurde zuerst erstellt, bevor .Net Generika hatte. Dictionary ist jedoch eine generische Klasse und bietet Ihnen starke Tippvorteile. Ich würde HashTable niemals verwenden, da die Verwendung von Dictionary nichts kostet.
quelle
Ein weiterer wichtiger Unterschied ist, dass
Hashtable
Thread-sicher ist.Hashtable
hat eine eingebaute Thread-Sicherheit für mehrere Leser / einzelne Schreiber (MR / SW), was bedeutet,Hashtable
dass EIN Schreiber zusammen mit mehreren Lesern ohne Sperren verwendet werden kann. Im Falle derDictionary
es keinen Thread - Sicherheit, wenn Sie Sicherheitsfaden müssen Sie Ihre eigene Synchronisierung implementieren müssen.Um weiter auszuarbeiten:
quelle
Wörterbücher haben den Vorteil, dass sie ein generischer Typ sind, der sie typsicher und etwas schneller macht, da kein Boxen erforderlich ist. Die folgende Vergleichstabelle (erstellt anhand der Antworten in einem ähnlichen SO- Fragenbeitrag ) zeigt einige der anderen Gründe, die Wörterbücher über Hash-Tabellen unterstützen (oder umgekehrt).
quelle
Wenn Sie sich für das Lesen interessieren, das die Objekte immer in der Reihenfolge zurückgibt, in der sie in ein Wörterbuch eingefügt wurden, können Sie sich das ansehen
OrderedDictionary - Auf Werte kann über einen ganzzahligen Index zugegriffen werden (nach der Reihenfolge, in der Elemente hinzugefügt wurden). SortedDictionary - Elemente werden automatisch sortiert
quelle
Das Wörterbuch ist schneller als die Hashtabelle, da das Wörterbuch ein allgemein starker Typ ist. Hashtable ist langsamer, da es Objekte als Datentyp verwendet, was zum Ein- und Auspacken führt.
quelle