1

Java ハッシュコードは整数 (サイズ 2 pow 32)

ハッシュテーブル/ハッシュマップを作成すると、マップの初期容量に等しいサイズのバケットが作成されます。つまり、サイズ「初期容量」の配列を作成します

質問 1. キー (Java オブジェクト) のハッシュコードをバケット インデックスにどのようにマップしますか? 2. ハッシュマップのサイズは大きくなる可能性があるため、ハッシュマップのサイズを 2 pow 32 にすることはできますか? 答えが「はい」の場合、サイズ 2 pow 32 の配列を持つのが賢明ですか?

4

2 に答える 2

2

現在のソース コードへのリンクは次のとおりです: http://www.docjar.com/html/api/java/util/HashMap.java.html

あなたの質問に対する答えは、(部分的に) 実装固有のものです。

1) コードを参照してください。実装方法に関するあなたの仮定initialCapacityは正しくないことに注意してください...少なくともOracle Java 6および7の場合。具体的にinitialCapacityは、必ずしもハッシュマップの配列サイズではありません。

2) a のサイズはHashMapエントリの数であり、2^32! あなたは実際に容量について話していると思います。HashMap の配列のサイズは、理論的には2^31 - 1(Java 配列の最大サイズ) に制限されています。現在の実装でMAX_CAPACITYは、実際には2^30; コードを参照してください。

3) 「... サイズの配列を持つのが賢明2^32ですか?」 現在定義されている Java では不可能であり、不可能なことをしようとするのは賢明ではありません。

Java でのハッシュ テーブル データ構造の設計について本当に質問している場合は、通常のサイズのハッシュ テーブルの効率と巨大なハッシュ テーブルの効率との間にトレードオフがあります。2^30つまり、要素を大幅に超えるマップ。実装は、HashMap通常のサイズのマップで最適に機能するように調整されています。巨大なマップを日常的に処理する必要があり、パフォーマンスが重要である場合は、特定の要件に合わせて調整されたカスタム マップ クラスの実装を検討する必要があります。

于 2013-02-23T03:22:06.540 に答える