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