Partager via


Types collection Hashtable et Dictionary

La classe System.Collections.Hashtable et les classes génériques System.Collections.Generic.Dictionary<TKey, TValue> et System.Collections.Concurrent.ConcurrentDictionary<TKey, TValue> implémentent également l'interface System.Collections.IDictionary. La classe générique Dictionary<TKey, TValue> implémente également l'interface générique IDictionary<TKey, TValue>. Par conséquent, chaque élément de ces collections est une paire clé-valeur.

Un objet Hashtable se compose de compartiments contenant les éléments de la collection. Un compartiment est un sous-groupe virtuel d'éléments dans le type Hashtable, ce qui rend les opérations de recherche et d'extraction plus simples et plus rapides que dans la plupart des collections. Chaque compartiment est associé à un code de hachage, lequel est généré à l'aide d'une fonction de hachage et basé sur la clé de l'élément.

La classe générique HashSet<T> est une collection non ordonnée qui permet de contenir des éléments uniques. Pour plus d'informations sur cette collection, consultez HashSet, type collection.

Une fonction de hachage est un algorithme qui retourne un code de hachage numérique fondé sur une clé. La clé est la valeur d'une propriété de l'objet stocké. Une fonction de hachage doit toujours retourner le même code de hachage pour la même clé. Une fonction de hachage peut générer le même code de hachage pour deux clés différentes, mais une fonction de hachage qui génère un code de hachage unique pour chaque clé unique offre de meilleures performances lors de l'extraction d'éléments à partir de la table de hachage.

Chaque objet utilisé comme élément dans un Hashtable doit pouvoir générer un code de hachage pour lui-même à l'aide d'une implémentation de la méthode GetHashCode. Cependant, vous pouvez également spécifier une fonction de hachage pour tous les éléments d'un type Hashtable en utilisant un constructeur Hashtable qui accepte une implémentation IHashCodeProvider comme paramètre.

Lorsqu'un objet est ajouté à un type Hashtable, il est stocké dans le compartiment associé au code de hachage correspondant au code de hachage de l'objet. Lorsqu'une valeur est recherchée dans Hashtable, le code de hachage est généré pour cette valeur et le compartiment associé à ce code de hachage est exploré.

Par exemple, une fonction de hachage d'une chaîne peut prendre les codes ASCII de chaque caractère dans la chaîne et les regrouper ensemble pour générer un code de hachage. La chaîne "pique-nique" peut avoir un code de hachage différent de celui de la chaîne "basket" ; par conséquent, les chaînes "pique-nique" et "basket" se retrouveraient dans des compartiments différents. En revanche, "stressé" et "desserts" auraient le même code de hachage et se retrouveraient dans le même compartiment.

Les classes Dictionary<TKey, TValue> et ConcurrentDictionary<TKey, TValue> ont les mêmes fonctionnalités que la classe Hashtable. Un Dictionary<TKey, TValue> d'un type spécifique (autre que Object) offre de meilleures performances qu'un Hashtable pour les types valeur. Cela est dû au fait que les éléments de Hashtable sont de type Object ; par conséquent, le boxing et l'unboxing se produisent généralement lors du stockage ou de la récupération d'un type valeur. La classe ConcurrentDictionary<TKey, TValue> doit être utilisée lorsque plusieurs threads sont susceptibles d'accéder simultanément à la collection.

Voir aussi

Référence

Hashtable

IDictionary

IHashCodeProvider

Dictionary<TKey, TValue>

System.Collections.Generic.IDictionary<TKey, TValue>

System.Collections.Concurrent.ConcurrentDictionary<TKey, TValue>

Concepts

HashSet, type collection

Autres ressources

Types de collections couramment utilisés