Hashtable-Sammlungstyp und Dictionary-SammlungstypHashtable and Dictionary Collection Types

Die Klasse System.Collections.Hashtable und die generischen Klassen System.Collections.Generic.Dictionary<TKey,TValue> und System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue> implementieren die System.Collections.IDictionary-Schnittstelle.The System.Collections.Hashtable class, and the System.Collections.Generic.Dictionary<TKey,TValue> and System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue> generic classes, implement the System.Collections.IDictionary interface. Die generische Klasse Dictionary<TKey,TValue> implementiert außerdem die generische IDictionary<TKey,TValue>-Schnittstelle.The Dictionary<TKey,TValue> generic class also implements the IDictionary<TKey,TValue> generic interface. Daher ist jedes Element in diesen Auflistungen ein Schlüssel-Wert-Paar.Therefore, each element in these collections is a key-and-value pair.

Ein Hashtable-Objekt besteht aus Buckets, die die Elemente der Auflistung enthalten.A Hashtable object consists of buckets that contain the elements of the collection. Ein Buckets ist eine virtuelle Untergruppe von Elementen innerhalb der Hashtable, der das Suchen und Abrufen schneller und einfacher als in den meisten Auflistungen ermöglicht.A bucket is a virtual subgroup of elements within the Hashtable, which makes searching and retrieving easier and faster than in most collections. Jedem Bucket ist ein Hashcode zugeordnet, der mithilfe einer Hashfunktion generiert wird und auf dem Schlüssel des Elements basiert.Each bucket is associated with a hash code, which is generated using a hash function and is based on the key of the element.

Die generische Klasse HashSet<T> ist eine ungeordnete Auflistung für eindeutige Elemente.The generic HashSet<T> class is an unordered collection for containing unique elements.

Eine Hashfunktion ist ein Algorithmus, der einen numerischen Hashcode anhand eines Schlüssels zurückgibt.A hash function is an algorithm that returns a numeric hash code based on a key. Der Schlüssel ist der Wert einer Eigenschaft des Objekts, das gespeichert wird.The key is the value of some property of the object being stored. Eine Hashfunktion muss immer denselben Hashcode für denselben Schlüssel zurückgeben.A hash function must always return the same hash code for the same key. Es ist möglich, dass eine Hashfunktion, den gleichen Hashcode für zwei verschiedene Schlüssel generiert. Eine Hashfunktion, die einen eindeutigen Hashcode für jeden eindeutigen Schlüssel generiert, führt jedoch zu besserer Leistung beim Abrufen von Elementen aus der Hashtabelle.It is possible for a hash function to generate the same hash code for two different keys, but a hash function that generates a unique hash code for each unique key results in better performance when retrieving elements from the hash table.

Jedes Objekt, das als ein Element in einer Hashtable verwendet wird, muss in der Lage sein, einen Hashcode für sich selbst zu generieren, indem eine Implementierung der Methode GetHashCode verwendet wird.Each object that is used as an element in a Hashtable must be able to generate a hash code for itself by using an implementation of the GetHashCode method. Allerdings können Sie auch eine Hashfunktion für alle Elemente in einer Hashtable mithilfe eines Hashtable-Konstruktors angeben, der eine IHashCodeProvider-Implementierung als einen seiner Parameter akzeptiert.However, you can also specify a hash function for all elements in a Hashtable by using a Hashtable constructor that accepts an IHashCodeProvider implementation as one of its parameters.

Wenn ein Objekt einer Hashtable hinzugefügt wird, wird es in dem Bucket gespeichert, der dem Hashcode zugeordnet ist, der mit dem Hashcode des Objekts übereinstimmt.When an object is added to a Hashtable, it is stored in the bucket that is associated with the hash code that matches the object's hash code. Wenn in der Hashtable nach einem Wert gesucht wird, wird der Hashcode für diesen Wert generiert, dann wird der diesem Hashcode zugeordnete Bucket durchsucht.When a value is being searched for in the Hashtable, the hash code is generated for that value, and the bucket associated with that hash code is searched.

Eine Hashfunktion für eine Zeichenfolge kann z. B. die ASCII-Codes jedes Zeichens in der Zeichenfolge annehmen und sie dann zusammen hinzufügen, um einen Hashcode zu generieren.For example, a hash function for a string might take the ASCII codes of each character in the string and add them together to generate a hash code. Die Zeichenfolge "Segel" besitzt z. B. einen anderen Hashcode als die Zeichenfolge "Seife". Daher werden die Zeichenfolgen "Segel" und "Seife" in verschiedenen Buckets gespeichert.The string "picnic" would have a hash code that is different from the hash code for the string "basket"; therefore, the strings "picnic" and "basket" would be in different buckets. Im Gegensatz dazu weisen "nie" und "ein" den gleichen Hashcode auf und befinden sich im gleichen Bucket.In contrast, "stressed" and "desserts" would have the same hash code and would be in the same bucket.

Die Klassen Dictionary<TKey,TValue> und ConcurrentDictionary<TKey,TValue> weisen die gleiche Funktionalität wie die Klasse Hashtable auf.The Dictionary<TKey,TValue> and ConcurrentDictionary<TKey,TValue> classes have the same functionality as the Hashtable class. Ein Dictionary<TKey,TValue> eines bestimmten Typs (außer Object) bietet eine bessere Leistung als eine Hashtable für Werttypen.A Dictionary<TKey,TValue> of a specific type (other than Object) provides better performance than a Hashtable for value types. Der Grund hierfür ist, dass die Elemente von Hashtable vom Typ Object sind. Daher treten das Boxing und das Unboxing in der Regel beim Speichern oder Abrufen eines Werttyps auf.This is because the elements of Hashtable are of type Object; therefore, boxing and unboxing typically occur when you store or retrieve a value type. Die Klasse ConcurrentDictionary<TKey,TValue> sollte verwendet werden, wenn mehrere Threads möglicherweise gleichzeitig auf die Auflistung zugreifen.The ConcurrentDictionary<TKey,TValue> class should be used when multiple threads might be accessing the collection simultaneously.

Siehe auchSee Also

Hashtable
IDictionary
IHashCodeProvider
Dictionary<TKey,TValue>
System.Collections.Generic.IDictionary<TKey,TValue>
System.Collections.Concurrent.ConcurrentDictionary<TKey,TValue>
Häufig verwendete AuflistungstypenCommonly Used Collection Types