ArrayList的最大容量是多少?

时间:2017-05-07 16:57:32

标签: list arraylist collections capacity

我知道ArrayList的初始容量是10.超过此限制时,会创建一个容量为(oldcapacity * 3 / 2) + 1的新ArrayList,并复制元素。

但是ArrayList的最大容量是多少?

我在接受采访时被问到这个问题。面试官对默认初始容量不感兴趣,但想知道ArrayList的最大容量。

1 个答案:

答案 0 :(得分:2)

查看源代码:

public ArrayList(int initialCapacity) {
    if (initialCapacity > 0) {
        this.elementData = new Object[initialCapacity];
    } else if (initialCapacity == 0) {
        this.elementData = EMPTY_ELEMENTDATA;
    } else {
        throw new IllegalArgumentException("Illegal Capacity: "+
                                           initialCapacity);
    }
}

您将在此处看到相关部分:

this.elementData = new Object[initialCapacity];

所以数组列表最多可以包含数组所能容纳的元素。

可能会出现下一个问题: 有多少元素可以容纳数组?

答案是:这取决于您编写代码的VM:

JDK8中的

/**
 * The maximum size of array to allocate.
 * Some VMs reserve some header words in an array.
 * Attempts to allocate larger arrays may result in
 * OutOfMemoryError: Requested array size exceeds VM limit
 */
private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;

其中

 /**
 * A constant holding the maximum value an {@code int} can
 * have, 2<sup>31</sup>-1.
 */
@Native public static final int   MAX_VALUE = 0x7fffffff;