-1

重複の可能性:
ArrayList のデフォルト容量が 10 なのはなぜですか?

ArrayListとのデフォルトの初期容量がHashMap等しくないのはなぜですか?

  • デフォルトの初期容量ArrayList: 10
  • デフォルトの初期容量HashMap: 16

またHashMap、容量は 2 の累乗ですが、 ではありませんArrayList。これはJDK6によるものです。

4

3 に答える 3

2

HashMap は、サイズが 2 のべき乗でなければならない配列を使用します (ドキュメントに従って)。したがって、ArrayList の初期容量と少なくとも等しい最小値の初期容量を選択したと思います。

また、これら 2 つの数値は、パフォーマンスとメモリ消費量の最適なトレードオフを実現するために、実際のプログラムの統計に基づいて選択されたものと思われます。

Josh Bloch が来て、コレクション フレームワークが設計されたときにこれらの数値が選択された理由を説明しない限り、推測することしかできません。

于 2012-12-08T08:45:08.930 に答える
1

HashMap のソースのコメントによると、2 のべき乗でなければなりません。ハッシュがどのように機能するかにより、HashMap では意味があります。

ただし、arraylist で 2 の累乗が意味を持つ理由はありません。そのような番号を選択する背後に何らかの理由がある場合は、ソース自体で言及されていたはずです.

IMHO、これは単なる任意の数値であり、頻繁なサイズ変更を回避するのに十分な大きさ(パフォーマンスの向上)であり、未使用の容量でメモリを浪費しないように十分小さいです。

于 2012-12-08T08:45:36.727 に答える
0

ArrayList の初期容量は、JVM の実装に依存します (つまり、この値に関する公式の要件はありません)。したがって、使用している JVM によって異なりますが、10 個または 16 個ある可能性があります。

于 2012-12-08T08:45:19.923 に答える