如果是Java中的arraylist。列表的最大容量是多少?

时间:2015-10-29 10:45:47

标签: java

现在按照SCJP的说法,arraylist max。 size应该取决于可用内存的大小,但list.getSize()返回一个Integer。因此可以安全地假设INTEGER.MAXSIZE是最大值。阵列的容量。即int允许的最大值

4 个答案:

答案 0 :(得分:5)

好吧,由于ArrayList由数组支持,因此它的最大容量不能高于数组的最大长度,该数组受Integer.MAX_VALUE的约束(因为数据的索引)数组总是int)。

答案 1 :(得分:2)

还有一个问题,答案与您的问题相符,也是一个简单的测试示例:Do Java arrays have a maximum size?

有两个限制:

1.-可用内存

2.-整数的最大大小

但我非常确定你在第二个限制之前击中第一个。

希望有所帮助!

答案 2 :(得分:0)

来自不同的来源:

  

List是Java中的一个接口,这意味着它可能有多个实现。其中一个实现是ArrayList,它是一个使用数组作为数据结构实现List接口行为的类。

Arrays vs Arraylist

由于Arraylist基于数组,因此最大大小应为:

  

通过32位整数访问Java数组,最大理论数组大小为2147483647个元素。

Max array size

好吧,如果你的元素的内存占用足够大,你可能会在达到该数字之前耗尽你的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++;
}