Attenzione, c'è una importante differenza tra i due casi. Le collezioni contengono oggetti, non tipi primitivi.Originariamente inviato da camellight
codice:List<Integer> L = new ArrayList<Integer>(); for(int i=0;i<10000000;i++) L.add(i);codice:int L[] = new int[10000000]; for(int i=0;i<10000000;i++) L[i]=i;
ArrayList è basato internamente su un array di tipo reference gestito per così dire a "espansione di capacità" cioè in un certo momento la capacità fisica dell'array interno potrebbe essere ben maggiore del numero logico degli elementi.
Ma in sostanza c'è un array di riferimenti ad oggetti. E nel primo caso sopra, sebbene un Integer abbia come unico "stato" il int primitivo, comunque occupa altra memoria per via di come la JVM gestisce gli oggetti.
Nel tuo secondo caso, l'array è di int primitivi, che sono tutti allocati uno a fianco all'altro in modo contiguo e compatto.
Vector è il "fratello più vecchio" di ArrayList.Originariamente inviato da camellight
La situazione non migliora con Vector
LinkedList è una lista internamente gestita come doppiamente-linkata fatta di nodi interni che hanno il riferimento all'oggetto i-esimo ma anche 2 riferimenti uno al nodo precedente, l'altro al successivo. E pure questo consuma ovviamente memoria, oltre al fatto che è davvero poco performante per un accesso "casuale".Originariamente inviato da camellight
e peggiora di molto con LinkedList