現在のソース コードへのリンクは次のとおりです: 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
通常のサイズのマップで最適に機能するように調整されています。巨大なマップを日常的に処理する必要があり、パフォーマンスが重要である場合は、特定の要件に合わせて調整されたカスタム マップ クラスの実装を検討する必要があります。