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.

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

Tömb lista LinkedList
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.