logo

Differenza tra ArrayList e LinkedList

ArrayList e LinkedList implementano entrambi l'interfaccia List e mantengono l'ordine di inserimento. Entrambe sono classi non sincronizzate.

stringa di input Java

Tuttavia, esistono molte differenze tra le classi ArrayList e LinkedList riportate di seguito.

Lista di arrayLista collegata
1) ArrayList utilizza internamente a matrice dinamica per immagazzinare gli elementi.LinkedList utilizza internamente a elenco doppiamente concatenato per immagazzinare gli elementi.
2) La manipolazione con ArrayList è lento perché internamente utilizza un array. Se un elemento viene rimosso dall'array, tutti gli altri elementi vengono spostati in memoria.La manipolazione con LinkedList lo è Più veloce rispetto ad ArrayList perché utilizza un elenco doppiamente collegato, quindi non è richiesto lo spostamento di bit in memoria.
3) Una classe ArrayList può fungere da elenco solo perché implementa solo List.La classe LinkedList può fungere da elenco e coda sia perché implementa le interfacce List e Deque.
4) ArrayList è meglio per archiviare e accedere dati.Lista collegata è meglio per manipolare dati.
5) La posizione di memoria per gli elementi di un ArrayList è contigua.La posizione degli elementi di un elenco collegato non è contagiosa.
6) Generalmente, quando un ArrayList viene inizializzato, all'ArrayList viene assegnata una capacità predefinita pari a 10.Non esiste alcun caso di capacità predefinita in una LinkedList. In LinkedList, viene creato un elenco vuoto quando viene inizializzato un LinkedList.
7) Per essere precisi, un ArrayList è un array ridimensionabile.LinkedList implementa l'elenco doppiamente collegato dell'interfaccia dell'elenco.

Esempio di ArrayList e LinkedList in Java

Vediamo un semplice esempio in cui utilizziamo sia ArrayList che LinkedList.

Nome del file: TestArrayLinked.java

 import java.util.*; class TestArrayLinked{ public static void main(String args[]){ List al=new ArrayList();//creating arraylist al.add('Ravi');//adding object in arraylist al.add('Vijay'); al.add('Ravi'); al.add('Ajay'); List al2=new LinkedList();//creating linkedlist al2.add('James');//adding object in linkedlist al2.add('Serena'); al2.add('Swati'); al2.add('Junaid'); System.out.println('arraylist: '+al); System.out.println('linkedlist: '+al2); } } 
Provalo adesso

Produzione:

arraylist: [Ravi,Vijay,Ravi,Ajay] linkedlist: [James,Serena,Swati,Junaid] 

Punti da ricordare

Di seguito sono riportati alcuni punti importanti da ricordare riguardo a ArrayList e LinkedList.

  • Quando il tasso di aggiunta o rimozione è superiore agli scenari di lettura, scegli LinkedList. D'altra parte, quando la frequenza degli scenari di lettura è superiore al tasso di aggiunta o rimozione, ArrayList ha la precedenza su LinkedList.
  • Poiché gli elementi di un ArrayList sono archiviati in modo più compatto rispetto a un LinkedList; pertanto, ArrayList è più adatto alla cache rispetto a LinkedList. Pertanto, le possibilità di perdere la cache sono inferiori in un ArrayList rispetto a un LinkedList. In generale, si ritiene che una LinkedList abbia una scarsa località della cache.
  • Il sovraccarico di memoria nella LinkedList è maggiore rispetto all'ArrayList. È perché, in una LinkedList, abbiamo due collegamenti aggiuntivi (successivo e precedente) poiché è necessario memorizzare l'indirizzo del nodo precedente e successivo e questi collegamenti consumano spazio aggiuntivo. Tali collegamenti non sono presenti in un ArrayList.