Wikiでは、アイテムを辞書に追加するたびに(GetHashCodeを呼び出すことによって)ハッシュコードが計算されることを伝えています。システムは次に、ハッシュコードを使用して、自分の値が保存されるバケットを見つけます。辞書のキーハッシュコードと値が格納されているバケットのインデックスとの関係
私の値が辞書に格納されるバケット配列のハッシュコードとインデックスの関係を見つけるロジックを教えてください。
私がGetHashCodeメソッド誰Dictiornaryを作成し、それにオブジェクトを追加するときの状況を想像してみては値1000000
を返し、それは辞書内の1000000個の要素を持つ配列を作成し、インデックス999999999で私のオブジェクトを格納することを意味するのでしょうか?
これが正しいとすれば、1つの値だけを格納するような大きなサイズの配列を持つ点は何でしょうか。
関係が文書化されていないため、CLIの更新によって変更される可能性があります。さまざまなツールを使用すると、アセンブリの逆コンパイルが可能になります。しかし、特定のものに依存すると、ランダムな破損の可能性があります。これはXY問題のように聞こえるので、なぜ知りたいのですか? – Richard
いいえインデックスは、ハッシュコードとテーブルサイズの組み合わせ(たとえば、 'hashCode%table.Count')と衝突を解決した結果から計算されます。実装[ここ](https://referencesource.microsoft.com/#mscorlib/system/collections/generic/dictionary.cs,fd1acf96113fbda9)を見ることができます – Lee
概念的には、ハッシュバケット*は、所定のインデックスまたはインデックス範囲の値を格納することができる。必ずしも直接的な物理ストレージにマップする必要はありません。 「位置の配列」として実装することもできます。実装がデフォルトのバケット10個を提供する場合、キー/値のペアがあれば、各バケットはリンクされたリストに過ぎません。 –