2015-10-29 83 views

回答

5

好吧,由於ArrayList由一個數組支持,因此它的最大容量不能高於數組的最大長度,該數組的最大長度由Integer.MAX_VALUE(由於數組的索引始終爲int)。

+0

根據http://stackoverflow.com/questions/3038392/do-java-arrays-have-a-maximum-size Java數組的最大大小取決於虛擬機,並且在某些情況下小於'Integer.MAX_VALUE'。 – sdgfsdh

+1

@sdgfsdh我誤解了你的評論或者你編輯了它。我以爲你指的是ArrayList的最大大小,而不是數組。 – Eran

2

還有與您的問題相匹配的答案的另一個問題,也是一個簡單的例子來測試:Do Java arrays have a maximum size?

有兩個限制:

1.-可用內存

2:整數

最大尺寸但是我敢肯定你打第二個限制之前第一。

希望有幫助!

+0

我想我讀了一個關於「long」索引數組的提議,所以有些人似乎有足夠的內存來需要這樣的東西。但是,對於大多數人來說,內存限制必須是他們遇到的第一堵牆。 – Thilo

0

從不同的來源:

List是在Java中的接口,這意味着它可具有多個實施方式。其中一個實現是ArrayList,它是一個使用數組作爲數據結構來實現List接口行爲的類。

Arrays vs Arraylist

而且,由於ArrayList的基於陣列,你最大尺寸應該是:

Java數組是通過32位整數訪問,導致2147483647的最大理論陣列大小元素。

Max array size

好吧,如果你的元素有一個內存空間足夠大,你既可以達到這個數字之前耗盡你的虛擬機的堆大小或者你的機器內存,雖然。

0

ArrayList的最大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; 

鏈表中沒有能力有限,但它可以返回無效的大小

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++; 
} 
相關問題