2010-12-16 7 views
6

辞書の記憶/検索のメカニズムを理解しようとしているItem[TKey]の出典を調べています。辞書はどのように高速検索を行うのですか

私が混乱するところは、bucketsフィールドの素数のユーザーと、Entry<TKey,TValue>.nextの相互作用です。

誰かが私にその論理を説明することができますか、または私がそれを理解できる参照先を指すことができます。

ありがとうございました。ハッシュコードに

+0

ハッシュテーブル+別個のチェーンhttp://en.wikipedia.org/wiki/Hash_table#Separate_chaining – Ani

+1

ちょうど「素数」の部分を無視してください(これは数論に基づく最適化です)。 /ハッシュテーブル/ウィキペディアのページのグラフ。 –

答えて

5

ルックを参照してください。 Hashtable

辞書は単なる強タイプですハッシュテーブルの実装それは、キーで項目を置くいくつかの "バケツ"を持っています。

ハッシュテーブルに項目を追加すると、キーのハッシュコードを使用して、それを置くバケットを決定します(通常は非常に高速ですが、GetHashCodeを呼び出してモジュロを適用します)。バケット(ある種のリスト)があれば、バケットにすでに同じキーを持つアイテムが含まれているかどうかを確認し、そうでない場合は追加します。各バケットには、ハッシュテーブル内のすべてのアイテムの小さなサブセットしか含まれていないので、これも非常に高速です。

キーに基づいてアイテムを取得する場合は、キーのハッシュコードに基づいてバケットを決定し、バケット内のこのキーを持つアイテムを探します。

もちろん、これは非常に単純な説明です...詳細については、Wikipediaの記事をご覧ください。

関連する問題