2013-07-03 14 views
6

Sto creando un'applicazione di chat. Corrente Ho tutti i messaggi in un ArrayList, che mi ha fatto pensare: quanti elementi è il design ArrayList da tenere? 100? 1.000? 10.000?Quantità di elementi in ArrayList

+0

Attenzione ai problemi di threading. – SLaks

+0

Forse questo aiuta: http://www.coderanch.com/t/524745/java/java/Maximum-capacity-arrayList-String-objects –

+0

@MarounMaroun non tutti hanno abbastanza rep per chiudere. – CPerkins

risposta

11

ArrayList non può contenere più di Integer.MAX_VALUE elementi.

Quindi 2147483647 è il numero max.

3

ArrayList può contenere un numero qualsiasi di elementi fino a Integer.MAX_VALUE - questo è dovuto alla decisione di progettazione di utilizzare il tipo di dati int per gli indici. Tuttavia, ciò che è importante è il modo in cui si sta allocando la memoria per esso: l'allocazione della memoria è lenta e il modo in cui si elaborano/accedono agli elementi. Tuttavia, dal solo aspetto dello storage, sei limitato da MAX_VALUE. In Java, questo è 2^31-1 = 2.147.483.647.

Per qualsiasi normale applicazione questo dovrebbe essere sufficiente. Tuttavia, se è necessario altro, è possibile ottenere facilmente il codice sorgente e modificarlo per utilizzare long come tipo di dati di indice e quindi essere limitato da Long.MAX_VALUE.

+0

Il motivo non è dovuto alla scelta di indici int di per sé. La ragione è dovuta al backing store dell'implementazione List che è stata scelta per la sua complessità algoritmica desiderata (ammortizzata) dell'accesso casuale alla lista (che richiede un comportamento di tipo array). A sua volta questo backing store (un array) viene fornito con questa limitazione in Java/JVM. Tuttavia, si potrebbero implementare le interfacce List per utilizzare anche indici negativi dando all'utente 2^32 possibili indici usando lo stesso tipo di dati per index ('int'), ad esempio usando due array e alcuni oggetti extra come backing store di un array. – user268396

+0

@ user268396 Abbastanza soddisfacente, tuttavia è ancora possibile ottenere il sorgente per 'ArrayList' e modificarlo per aumentare la dimensione massima a qualsiasi cosa si desideri. Ad esempio, utilizza l'oggetto 'Object [] []' e usa 'long' come indice - ora sei limitato da' Integer.MAX_VALUE^2'. –

+0

Ovviamente, ma il mio punto più generale è che nella tua risposta (come detto) il ragionamento manca il legame tra la limitazione dell'implementazione e il comportamento dell'implementazione (complessità delle prestazioni/algoritmo).Se preso al valore nominale, una ragionevole domanda di follow-up sarebbe: perché usare ArrayList? A cosa serve se tutto ciò che può fare è una versione più limitata di 'LinkedList'. A cui la risposta è "complessità/prestazione algoritmica", ma la limitazione non è ovvia né spiegata. :) – user268396

6

ArrayList, che è supportato da un array ed è limitato alla dimensione dell'array - vale a dire Integer.MAX_VALUE.

Un LinkedList non è limitato allo stesso modo, tuttavia, e può contenere qualsiasi quantità di elementi.

vedere domanda simile max. length of List in Java

How many data a list can hold at the maximum di avere altri aspetti di dimensione massima di lista

+2

vedere http://stackoverflow.com/questions/7632126/maximum-size-of-hashset-vector-linkedlist –

+0

Sì, vedo ...: P Imparato da esso, grazie ...: D –

10

La dimensione del ArrayList è Integer.MAX_VALUE. Non perché, i commenti prima del metodo List#size() del numero List, la dimensione massima di qualsiasi List è Integer.MAX_VALUE simile a soffietto.

/** 
    * Returns the number of elements in this list. If this list contains 
    * more than <tt>Integer.MAX_VALUE</tt> elements, returns 
    * <tt>Integer.MAX_VALUE</tt>. 
    * 
    * @return the number of elements in this list 
    */ 
int size(); 

È, perché ArrayList usa matrice internamente e teoricamente una matrice può essere di Integer.MAX_VALUE dimensioni al massimo. Per ulteriori informazioni, è possibile vedere this.

+0

Questo doesn Non rispondere affatto alla domanda. La dimensione di JavaDoc stabilisce solo la limitazione sulla segnalazione delle dimensioni di una lista, si dice * nulla * sulla dimensione massima di una lista. – SimonC

+0

La risposta è completamente fuorviante, il 'size()' JavaDoc non fornisce alcuna indicazione sulla dimensione massima di qualsiasi implementazione di lista. – SimonC

Problemi correlati