我知道阵列列表的初始容量为10。超过此限制时,将创建一个新的arraylist,以(oldcapacity * 3 / 2) + 1
的容量创建新的arraylist,并且元素被复制。
但是,最大阵列列表的容量是什么?
我在接受采访中被问到这个问题。面试官对默认初始容量不感兴趣,但想知道阵列列表的最大容量。
在源代码中查看:
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;