Partage via


Types collection Hashtable et Dictionary

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

Un Hashtable objet se compose de compartiments qui contiennent les éléments de la collection. Un compartiment est un sous-groupe virtuel d’éléments au sein du Hashtable, qui facilite la recherche et rend la récupération plus facile et rapide 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 basé sur la clé de l’élément.

La classe générique HashSet<T> est une collection non ordonnée pour contenir des éléments uniques.

Une fonction de hachage est un algorithme qui retourne un code de hachage numérique basé sur une clé. La clé est la valeur de certaines propriétés de l’objet stocké. Une fonction de hachage doit toujours retourner le même code de hachage pour la même clé. Il est possible qu’une fonction de hachage génère 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 entraîne de meilleures performances lors de la récupération d’éléments à partir de la table de hachage.

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

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

Par exemple, une fonction de hachage pour une chaîne peut prendre les codes ASCII de chaque caractère de la chaîne et les ajouter ensemble pour générer un code de hachage. La chaîne « pique-» aurait un code de hachage différent du code de hachage pour la chaîne « panier » ; par conséquent, les chaînes « pique-» et « panier » se trouveraient dans des compartiments différents. Par contre, "ail" et "lia" auraient le même code de hachage et seraient dans le même compartiment.

Les classes Dictionary<TKey,TValue> et ConcurrentDictionary<TKey,TValue> ont la même fonctionnalité que la classe Hashtable. Un Dictionary<TKey,TValue> type spécifique (autre que Object) offre de meilleures performances qu’un Hashtable type valeur. La raison en est que les éléments de Hashtable sont de type Object. Par conséquent, le boxing et la conversion unboxing se produisent généralement quand vous stockez ou que vous récupérez un type valeur. La ConcurrentDictionary<TKey,TValue> classe doit être utilisée lorsque plusieurs threads peuvent accéder simultanément à la collection.

Voir aussi