Wörterbuch vs Hashtable
Das Wörterbuch ist typisiert (so dass Wertetypen nicht benötigt werden), eine Hashtabelle nicht (so-Wertetypen müssen getestet werden). Hashtable hat eine schönere Möglichkeit, einen Wert als das Wörterbuch IMHb zu erhalten, da es immer weiß, dass der Wert ein Objekt ist. Wenn Sie .NET 3.5 verwenden, ist es einfach, ein Erweiterungsverfahren für Wörterbücher zu schreiben, um ein ähnliches Verhalten zu erhalten.
Die Hashtable-Klasse ist ein bestimmter Typ der Dictionary-Klasse, der einen ganzzahligen Wert (Hash genannt) verwendet, um den Schlüssel seiner Schlüssel zu unterstützen. Die Hashtable-Klasse verwendet den Hash, um die Suche nach einem bestimmten Schlüssel im Programm zu beschleunigen. Jedes Objekt in .NET leitet sich von der Klasse Objekt ab. Diese Klasse unterstützt das GetHash-Verfahren, das eine Ganzzahl zurückgibt, die das Objekt eindeutig identifiziert. Die Hashtable-Klasse ist im Allgemeinen eine sehr effiziente Lösung. Das einzige Problem mit der Hashtable-Klasse ist, dass sie ein wenig Aufwand erfordert, und für kleine Bewegungen (weniger als zehn Elemente) kann der Aufwand die Leistung beeinträchtigen.
Es gibt einen größeren Unterschied zwischen einer HashTable und einem Dictionary. Wenn Sie Indexer verwenden, um einen Wert aus einer HashTable zu erhalten, gibt die HashTable erfolgreich Null für ein nicht vorhandenes Element zurück, wohingegen das Dictionary eine Fehlermeldung ausgibt, wenn Sie versuchen, mit einem Indexer auf einen Eintrag zuzugreifen, der nicht im Dictionary vorhanden ist.
Die HashTable ist die Basisklasse, die schwach typisiert ist. Die abstract-Klasse von DictionaryBase ist streng typisiert und verwendet intern eine HashTable.
Eine merkwürdige Sache, die man über Dictionary bemerkt, ist, dass, wenn wir mehrere Einträge in Dictionary hinzufügen, der Ordner, in dem die Einträge hinzugefügt werden, beibehalten wird. Wenn Sie also ein Wörterbuch auf das Wörterbuch anwenden, erhalten Sie die Ergebnisse in demselben Ordner, in den Sie sie eingefügt haben. Dies gilt jedoch nicht für nicht HashTable. Wenn Sie in Hashtable die gleichen Einträge hinzufügen, wird der Rest nicht gepflegt. Wenn 'Dictionary in Hashtable' zutrifft, ist wahr, warum Dictionary den Fehler hält, HashTable jedoch nicht?
Da sie sich unterschiedlich verhalten, liegt das daran, dass das Generic Dictionary eine Hashtabelle implementiert, jedoch nicht auf System.Cоllectiоns.Hashtable basiert. Die Implementierung des Generic Dictionary basiert auf der Allokation von Schlüssel-Wert-Paaren aus einer Liste. Diese werden dann mit den Hashtable-Buckets für einen zufälligen Zugriff indiziert. Wenn sie jedoch einen Enumerator zurückgibt, wird die Liste in sequentieller Reihenfolge durchlaufen. Dies ist der einzige Schritt, in dem Einträge eingefügt werden, da Einträge nicht wiederverwendet werden.