ArrayList容量限制

时间:2017-11-01 08:48:00

标签: java arraylist collections

我搜索过ArrayList容量问题,但找不到完整的答案。所以在这里再问一遍。

我理解我们在ArrayList中添加的元素数量和容量是我们可以在该列表中放入多少数据,默认值为10。

所以这里的问题是在声明是否给予这样的能力

List<String> list = new ArrayList<>(1);

然后我还可以继续添加最多10或20个元素。 那么这个容量声明只对内部重新分配有用吗?它会在达到容量时发生吗?

或者通过给出容量限制,我们只能限制添加元素的那一点吗?

3 个答案:

答案 0 :(得分:4)

初始容量无法确定您可以向ArrayList添加多少元素。必要时,随着元素的添加,容量会自动增加。

指定初始容量的动机是性能。如果您知道自己的ArrayList将包含一百万个元素,那么创建初始容量为1000000的ArrayList会更有效,因为这样可以节省调整ArrayList容量倍数的需要添加元素的时间。

答案 1 :(得分:1)

ArrayList由一个数组支持,其最大大小为Integer.MAX_VALUE - 8。

这些在以下答案中提及:

答案 2 :(得分:0)

ArrayLists和其他集合将随着容量的消耗而增长。 但是,他们如何做到这一点取决于“幕后”使用什么数据结构

数组列表由Java Array支持。当该数组接近填充时,将创建一个新的数组,通常具有两倍的容量,然后将所有元素从旧数组复制到新数组,然后ArrayList指向新数组。

由于数组每次都加倍,因此向数组添加元素仍然是常量时间操作或bigO表示法中的“O(1)”。它是在“摊销时间”

完成的

但是,如果您知道ArrayList可能包含n个元素,则可以使用初始大小n声明它。这使得初始Array足够大,可以容纳您期望的元素而无需进行任何“调整大小”。 (创建更大的数组并复制元素)。

然而,如果你低估n,这不是问题,因为ArrayList仍然会增长以处理额外的元素。