为什么ArrayList 10的默认容量是多少?

我看到了ArrayList的Java文档,发现ArrayList的初始容量为10。

 /**

* Constructs an empty list with an initial capacity of ten.

*/

public ArrayList() {

this(10);

}

我认为这是2的幂是有道理的,但为什么是10?

我还检查了HashMap的初始容量,这是16,这很有意义。

/**

* The default initial capacity - MUST be a power of two.

*/

static final int DEFAULT_INITIAL_CAPACITY = 16;

/**

* Constructs an empty <tt>HashMap</tt> with the default initial capacity

* (16) and the default load factor (0.75).

*/

public HashMap() {

this.loadFactor = DEFAULT_LOAD_FACTOR;

threshold = (int)(DEFAULT_INITIAL_CAPACITY * DEFAULT_LOAD_FACTOR);

table = new Entry[DEFAULT_INITIAL_CAPACITY];

init();

}

数字10后面是否有具体原因?

回答:

ArrayList是简单的增长数组。当尝试添加元素并且超出缓冲区大小时,它只是在增长。因此,初始大小可以是任何正值。

1将太少。即使有一些元素,我们也会有一些调整大小的操作。

100将损失空间。

因此,十是妥协。为什么是10,而不是12或8?第一个提示是,已分析了典型的用例,这是性能损失和空间损失之间的最佳匹配。但是,我认为,看到Sun的原始代码后,它并没有进行深入的分析,而是一个任意的“不要太小,不要太大”的数字。

以上是 为什么ArrayList 10的默认容量是多少? 的全部内容, 来源链接: utcz.com/qa/431463.html

回到顶部