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 array | Lista 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.