2017-12-10 3 views
1

Java HashMap要素は、要素のキーのハッシュに基づいて「バケット」に格納されていることを理解します。 C#の辞書でも同じハッシュが発生しますか?そうでない場合、ルックアップはどのように機能しますか?C#辞書はJava HashMapsと同じ方法でハッシュを使用しますか?

+0

@ maytham-HはHashtablesとは異なる辞書ではありませんが、 –

+1

はい、C#の 'Dictionary 'も同じように動作します。バケットは、ハッシュのスペースをより小さく、より管理しやすいチャンクに分割し、ハッシュの衝突に対処するために使用されます。バケットの数は、辞書容量よりも大きい最初の素数です(したがって、最初の項目を辞書に挿入すると、3つのバケットが含まれます)。容量を増やす必要があるときはいつでも項目は新しいバケットに再配置されます。 – Groo

+0

なぜこれがXYの問題かどうかを尋ねています - https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem? – mjwills

答えて

4

C#System.Collections - namespaceにはいくつかの種類の辞書があります。彼らはさまざまな戦略を使用して内部データを保存します。

この1つのSystem.Collections.Specialized.HybridDictionary は、一定のサイズに達するまでDoubleLinkedListsを使用し、ハッシュセットに切り替えます。 「通常の」System.Collections.Generics-Dictionaryは、常に内部的にハッシュセットを使用します。また、同時使用のための辞書もあります。あなたが好きな場合は、それを自分で調べてください(Concurrent Dictionary)。

これは、あなたが使用しているクラスの内部的な考慮事項により、使用している辞書の種類(上記の場合)が変更されることがあるかどうかによって異なります。

関連する問題