logo

Diferència entre ArrayList i LinkedList

ArrayList i LinkedList implementen la interfície List i mantenen l'ordre d'inserció. Tots dos són classes no sincronitzades.

angle agut

Tanmateix, hi ha moltes diferències entre les classes ArrayList i LinkedList que es donen a continuació.

ArrayListLinkedList
1) ArrayList utilitza internament a matriu dinàmic per emmagatzemar els elements.LinkedList utilitza internament a llista doblement enllaçada per emmagatzemar els elements.
2) La manipulació amb ArrayList és lent perquè internament utilitza una matriu. Si s'elimina algun element de la matriu, tots els altres elements es desplaçaran a la memòria.La manipulació amb LinkedList és més ràpid que ArrayList perquè utilitza una llista doblement enllaçada, de manera que no es requereix cap canvi de bits a la memòria.
3) Una classe ArrayList pot actuar com una llista només perquè només implementa List.La classe LinkedList pot actuar com una llista i cua tant perquè implementa interfícies List i Deque.
4) ArrayList és millor per emmagatzemar i accedir dades.LinkedList és millor per manipular dades.
5) La ubicació de memòria dels elements d'una ArrayList és contigua.La ubicació dels elements d'una llista enllaçada no és contagiosa.
6) Generalment, quan s'inicialitza una ArrayList, s'assigna una capacitat per defecte de 10 a ArrayList.No hi ha cap cas de capacitat predeterminada en una LinkedList. A LinkedList, es crea una llista buida quan s'inicia una LinkedList.
7) Per ser precisos, una ArrayList és una matriu redimensionable.LinkedList implementa la llista doblement enllaçada de la interfície de llista.

Exemple de ArrayList i LinkedList a Java

Vegem un exemple senzill on utilitzem ArrayList i LinkedList.

Nom de l'arxiu: 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); } } 
Prova-ho ara

Sortida:

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

Punts a recordar

A continuació es mostren alguns punts importants que cal recordar pel que fa a ArrayList i LinkedList.

  • Quan la taxa d'addició o eliminació sigui superior als escenaris de lectura, aneu a la LinkedList. D'altra banda, quan la freqüència dels escenaris de lectura és superior a la taxa d'addició o eliminació, llavors ArrayList té prioritat sobre LinkedList.
  • Com que els elements d'una ArrayList s'emmagatzemen més compactes en comparació amb una LinkedList; per tant, la ArrayList és més amigable amb la memòria cau en comparació amb la LinkedList. Per tant, les possibilitats de fallar la memòria cau són menors en una ArrayList en comparació amb una LinkedList. En general, es considera que una LinkedList és pobre en localitat de memòria cau.
  • La sobrecàrrega de memòria a la LinkedList és més gran que a la ArrayList. És perquè, en una LinkedList, tenim dos enllaços addicionals (següent i anterior) ja que és necessari per emmagatzemar l'adreça dels nodes anterior i següent, i aquests enllaços consumeixen espai addicional. Aquests enllaços no estan presents en una ArrayList.