Partager via


Types collection Hashtable et Dictionary

Mise à jour : novembre 2007

La classe Hashtable et la classe générique Dictionary<TKey, TValue> implémentent l'interface 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, généré à l'aide d'une fonction de hachage et reposant sur la clé de l'élément.

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 type Hashtable doit pouvoir générer un code de hachage pour lui-même par 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.

La classe Dictionary<TKey, TValue> a les mêmes fonctionnalités que la classe Hashtable. Un Dictionary<TKey, TValue> d'un type spécifique (autre que Object) offre des performances supérieures à celles d'un Hashtable pour les types valeur, car les éléments de Hashtable sont de type Object ; par conséquent, les conversions boxing/unboxing se produisent généralement en cas de stockage ou d'extraction d'un type valeur.

Voir aussi

Référence

Hashtable

IDictionary

IHashCodeProvider

Dictionary<TKey, TValue>

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

Autres ressources

Types de collections couramment utilisés