现在按照SCJP的说法,arraylist max。 size应该取决于可用内存的大小,但list.getSize()返回一个Integer。因此可以安全地假设INTEGER.MAXSIZE
是最大值。阵列的容量。即int允许的最大值
答案 0 :(得分:5)
好吧,由于ArrayList
由数组支持,因此它的最大容量不能高于数组的最大长度,该数组受Integer.MAX_VALUE
的约束(因为数据的索引)数组总是int
)。
答案 1 :(得分:2)
还有一个问题,答案与您的问题相符,也是一个简单的测试示例:Do Java arrays have a maximum size?。
有两个限制:
1.-可用内存
2.-整数的最大大小
但我非常确定你在第二个限制之前击中第一个。
希望有所帮助!
答案 2 :(得分:0)
来自不同的来源:
List是Java中的一个接口,这意味着它可能有多个实现。其中一个实现是ArrayList,它是一个使用数组作为数据结构实现List接口行为的类。
由于Arraylist基于数组,因此最大大小应为:
通过32位整数访问Java数组,最大理论数组大小为2147483647个元素。
好吧,如果你的元素的内存占用足够大,你可能会在达到该数字之前耗尽你的VM的堆大小或你的机器内存。
答案 3 :(得分:0)
ArrayList max capasity是Integer.MAX_VALUE -8,ArrayList可以抛出OutOfMemoryError
private static int hugeCapacity(int minCapacity) {
if (minCapacity < 0) // overflow
throw new OutOfMemoryError();
return (minCapacity > MAX_ARRAY_SIZE) ?
Integer.MAX_VALUE :
MAX_ARRAY_SIZE;
}
/**
* 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;
LinkedList不受容量限制,但可以返回无效大小
public boolean add(E e) {
linkLast(e);
return true;
}
void linkLast(E e) {
final Node<E> l = last;
final Node<E> newNode = new Node<>(l, e, null);
last = newNode;
if (l == null)
first = newNode;
else
l.next = newNode;
size++;
modCount++;
}