logo

Különbség az ArrayList és a LinkedList között

Az ArrayList és a LinkedList egyaránt megvalósítja a List interfészt és fenntartja a beillesztési sorrendet. Mindkettő nem szinkronizált osztály.

algoritmus bfs-hez

Az alábbiakban bemutatott ArrayList és LinkedList osztályok között azonban sok különbség van.

Tömb listaLinkedList
1) Az ArrayList belsőleg a dinamikus tömb az elemek tárolására.A LinkedList belsőleg használja a duplán linkelt lista az elemek tárolására.
2) Az ArrayList-tel való manipuláció az lassú mert belsőleg egy tömböt használ. Ha egy elemet eltávolítunk a tömbből, az összes többi elem eltolódik a memóriában.A LinkedList-tel való manipuláció az gyorsabban mint az ArrayList, mert duplán linkelt listát használ, így nincs szükség biteltolásra a memóriában.
3) Egy ArrayList osztály képes listaként működjön csak azért, mert csak a listát valósítja meg.A LinkedList osztály képes listaként és várólistaként működik mind azért, mert List és Deque interfészt valósít meg.
4) Az ArrayList az jobb tároláshoz és hozzáféréshez adat.A LinkedList az jobb a manipulációhoz adat.
5) Az ArrayList elemeinek memóriahelye összefüggő.A hivatkozott lista elemeinek helye nem fertőző.
6) Általában, amikor egy ArrayList inicializálva van, az ArrayList alapértelmezett kapacitása 10 lesz hozzárendelve.A LinkedListben nincs alapértelmezett kapacitás. A LinkedListben egy üres lista jön létre, amikor egy LinkedList inicializálódik.
7) Pontosabban, az ArrayList egy átméretezhető tömb.A LinkedList a listafelület duplán linkelt listáját valósítja meg.

Példa az ArrayList-re és a LinkedList-re Java-ban

Lássunk egy egyszerű példát, ahol mind az ArrayList, mind a LinkedList alkalmazást használjuk.

Fájl név: 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); } } 
Tesztelje most

Kimenet:

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

Emlékeztető pontok

Az alábbiakban néhány fontos szempontot kell megjegyezni az ArrayList és a LinkedList kapcsán.

  • Ha a hozzáadási vagy eltávolítási arány nagyobb, mint az olvasási forgatókönyvek, akkor lépjen a LinkedList-re. Másrészt, ha az olvasási forgatókönyvek gyakorisága nagyobb, mint a hozzáadási vagy eltávolítási arány, akkor az ArrayList elsőbbséget élvez a LinkedListtel szemben.
  • Mivel az ArrayList elemei kompaktabban vannak tárolva, mint a LinkedList; ezért az ArrayList gyorsítótárbarátabb, mint a LinkedList. Így a gyorsítótár kihagyásának esélye kisebb az ArrayList-ben, mint a LinkedList-ben. Általában úgy ítélik meg, hogy a LinkedList nem rendelkezik gyorsítótárral.
  • A LinkedList memória többletterhelése nagyobb, mint az ArrayListben. Ennek az az oka, hogy a LinkedList-ben két extra hivatkozásunk van (következő és előző), mivel az előző és a következő csomópontok címének tárolásához szükséges, és ezek a hivatkozások extra helyet foglalnak el. Az ilyen hivatkozások nincsenek jelen az ArrayListben.