に格納される要素の数は事前にわかりませんHashmap
。では、私の容量はどのくらいの大きさにする必要がHashMap
ありますか?ここで考慮すべき要素は何ですか?再ハッシュは非常に高価なので、可能な限り最小限に抑えたいと思います。
2 に答える
スペース要件と速度の間で適切なトレードオフが必要です(これは、多くの衝突が発生した場合に減少し、スペース割り当てを減少させた場合に発生する可能性が高くなります)。
負荷率を定義できます。デフォルトはおそらく問題ありません。
しかし、避けたいのは、ハッシュテーブルが大きくなるにつれて再構築して拡張する必要があることです。したがって、事前に最大容量でサイズを決定する必要があります。残念ながら、そのためには、それにどれだけ投入するかを大まかに知る必要があります。
少しのメモリを浪費する余裕があり、少なくともそれがどれだけ大きくなるかについて妥当な上限がある場合は、それを初期容量として使用できます。その容量を下回っている場合は、再ハッシュされることはありません。メモリ要件は容量に比例します(おそらく誰かが数字を持っています)。デフォルトの負荷率が0.75の場合、すでに75%がいっぱいになるとテーブルが拡張されるため、容量を要素数よりも少し高く設定する必要があることに注意してください。
本当にわからない場合は、デフォルトを使用してください。彼らがあなたの場合に完璧だからではなく、あなたが代替設定の根拠を持っていないからです。
良いニュースは、次善の値を設定した場合でも、それでも正常に機能し、メモリやCPUサイクルを少し浪費するだけです。
ドキュメントには、合理的な決定を下すために必要な最小限の情報が記載されています。はじめにを読んでください。アプリケーションの性質、予想される負荷についての詳細を提供していないため、考慮すべき要素がわかりません...この段階での最善のアドバイスは、デフォルトの16のままにしてから、負荷テスト(ユーザーの観点からアプリについて考えてください)を実行すると、最初に必要な容量を大まかに把握できます。