重複の可能性:
ArrayList のデフォルト容量が 10 なのはなぜですか?
ArrayList
とのデフォルトの初期容量がHashMap
等しくないのはなぜですか?
- デフォルトの初期容量
ArrayList
: 10 - デフォルトの初期容量
HashMap
: 16
またHashMap
、容量は 2 の累乗ですが、 ではありませんArrayList
。これはJDK6によるものです。
重複の可能性:
ArrayList のデフォルト容量が 10 なのはなぜですか?
ArrayList
とのデフォルトの初期容量がHashMap
等しくないのはなぜですか?
ArrayList
: 10HashMap
: 16またHashMap
、容量は 2 の累乗ですが、 ではありませんArrayList
。これはJDK6によるものです。
HashMap は、サイズが 2 のべき乗でなければならない配列を使用します (ドキュメントに従って)。したがって、ArrayList の初期容量と少なくとも等しい最小値の初期容量を選択したと思います。
また、これら 2 つの数値は、パフォーマンスとメモリ消費量の最適なトレードオフを実現するために、実際のプログラムの統計に基づいて選択されたものと思われます。
Josh Bloch が来て、コレクション フレームワークが設計されたときにこれらの数値が選択された理由を説明しない限り、推測することしかできません。
HashMap のソースのコメントによると、2 のべき乗でなければなりません。ハッシュがどのように機能するかにより、HashMap では意味があります。
ただし、arraylist で 2 の累乗が意味を持つ理由はありません。そのような番号を選択する背後に何らかの理由がある場合は、ソース自体で言及されていたはずです.
IMHO、これは単なる任意の数値であり、頻繁なサイズ変更を回避するのに十分な大きさ(パフォーマンスの向上)であり、未使用の容量でメモリを浪費しないように十分小さいです。
ArrayList の初期容量は、JVM の実装に依存します (つまり、この値に関する公式の要件はありません)。したがって、使用している JVM によって異なりますが、10 個または 16 個ある可能性があります。