2013-08-09 8 views
17

Per esempio, se si dovesse avereLe liste di array contenenti diversi tipi di oggetti utilizzano quantità di memoria diverse?

int a=2; int b=3; 
    ArrayList<Integer>integers=new ArrayList<Integer>(); 
    integers.add(a); integers.add(b); 

e

String c="cow"; String d="deer"; 
    ArrayList<String> strings= new ArrayList<String>(); 
    strings.add(c); strings.add(d); 

avrebbero prendere diverse quantità di memoria? Qualsiasi aiuto/risposta sarebbe molto apprezzato, grazie!

+1

Il secondo esempio mancava il parametro generico ... –

+10

Una lista della spesa di 100 palloni da calcio richiede più carta della lista della spesa per 100 palline da golf? –

+1

@ChrisCudmore Ottima spiegazione .. –

risposta

48

Gli ArrayLists stessi non sono altro che una raccolta di riferimenti, che occupano la stessa quantità di memoria (se hanno le stesse dimensioni) indipendentemente dal tipo di oggetti in essi contenuti. Tuttavia, gli elementi a cui si riferisce ArrayList assumono tutti quantità di memoria differenti come ci si aspetterebbe.

7

Nel tuo caso, e in teoria, consumerebbero la stessa quantità di memoria, in runtime i "generici" non esistono e entrambi gli array sono in realtà matrici di oggetti.

+0

... quindi tutti gli oggetti usano la stessa quantità di memoria. 1 = 0! – Thomas

+3

Bene 0! == 1 ... – jnovacho

+1

@jnovacho Buon punto. Lasciami riformulare ... 1 = 0 \! – Thomas

0
ArrayList arr = new ArrayList<Foo>(10); 

arr contiene solo 1 riferimento dell'array di supporto. Questo array di supporto avrà 10 riferimenti di 10 Foo Objects diversi nell'heap.

+0

Si stanno confondendo gli array con 'ArrayList's. Il solo uso del costruttore 'int' non fa in modo che la lista contenga qualcosa. È solo la capacità iniziale. 'ArrayList' usa un array internamente. La capacità iniziale definisce solo la dimensione di questo array. '' è solo per tipo sicurezza (leggi generici). – adarshr

+0

Hai ragione, grazie e riparato. – rocketboy

10

Le liste di array non sono altro che una raccolta di riferimenti, quindi la dimensione di ArrayList non dipende dal tipo di oggetto a cui punta. Quindi la memoria di ArrayList non dipende dai tipi di oggetti di riferimento.

-1

ArrayList è un oggetto come String o smth else. Memorizza la raccolta in una matrice Object [] interna. Questi array avranno una quantità diversa se la memoria ma ArrayList stessi avranno la stessa dimensione.

Problemi correlati