2010-12-16 7 views
6

Je regarde la source Item[TKey] de Dictionary<TKey,TValue> essayant de comprendre le mécanisme de stockage/récupération dans un dictionnaire, et pourquoi il est plus rapide que de vérifier chaque entrée une par une.Comment un dictionnaire fait une recherche rapide

Où je suis confus est dans l'utilisateur des nombres premiers dans le champ buckets et l'interaction avec Entry<TKey,TValue>.next. Est-ce que quelqu'un peut m'expliquer la logique, ou pointer vers une référence où je peux le comprendre.

Merci.

+0

HashTable + chaînage séparé http://en.wikipedia.org/wiki/Hash_table#Separate_chaining – Ani

+1

ignorez simplement la partie "nombre premier" pour le moment (il s'agit d'une optimisation basée sur la théorie des nombres), et regardez le graphiques dans la table/hash/page wikipedia. –

Répondre

5

Regardez cet article Wikipedia: Hashtable

Un dictionnaire est juste un type fort d implémentation d'une hashtable. Il a un certain nombre de "seaux" où il met les éléments avec leurs clés. Lorsque vous ajoutez un élément à la hashtable, il utilise le hashcode de la clé pour décider dans quel seau il va le mettre (c'est normalement une opération très rapide, appelez GetHashCode et lui appliquer un modulo). Une fois qu'il a le bucket (qui est une sorte de liste), il vérifie si le bucket contient déjà un élément avec la même clé, et l'ajoute si ce n'est pas le cas. Ceci est également très rapide, car chaque compartiment contient seulement un petit sous-ensemble de tous les éléments de la table de hachage. Lorsque vous voulez récupérer un élément en fonction de sa clé, il détermine le compartiment en fonction du code de hachage de la clé et recherche un élément avec cette clé dans le compartiment.

Bien sûr, c'est une description très simpliste ... regardez l'article Wikipedia pour plus de détails.

Questions connexes