Java Collections Framework, dinamik veri depolamak ve yönetmek için farklı yapılar sunar. En çok kullanılan iki liste yapısı ArrayList ve LinkedList’tir. Her ikisi de List
arayüzünü (interface) uygular fakat çalışma prensipleri, performansları ve kullanım alanları farklıdır.
Bu yazıda ArrayList ve LinkedList nedir, nasıl çalışır, farkları nelerdir, avantajları ve dezavantajlarıyla birlikte örnek kullanımlarıyla açıklayacağız.
ArrayList Nedir?
ArrayList
, dinamik olarak büyüyebilen, dizi (array) tabanlı bir listedir. Elemanlar arka arkaya hafızada saklanır. Boyutu önceden bilinmeyen veya sıkça değişen listeler için idealdir.
Özellikleri
- Rastgele erişim (random access) hızlıdır, çünkü elemanlar indeksle erişilir.
- Eleman ekleme/silme, özellikle ortada yapılıyorsa maliyetlidir çünkü elemanların kaydırılması gerekir.
- Thread-safe değildir (çoklu iş parçacığı için
Vector
veyaCollections.synchronizedList
kullanılır).
🔗 LinkedList Nedir?
LinkedList
, düğümler (node) üzerinden bağlantılı bir listedir. Her eleman, hem kendi verisini hem de bir sonraki ve önceki elemanın referansını tutar.
Özellikleri
- Eleman ekleme/silme, özellikle listenin başında ya da ortasında hızlıdır (referansların güncellenmesi yeterlidir).
- Rastgele erişim (indeksleme) yavaştır, çünkü listedeki n. elemana erişmek için baştan saymak gerekir.
- Aynı zamanda
Deque
arayüzünü implemente ederek kuyruk ve yığın gibi veri yapıları için de kullanılır.
🧑💻 Kullanım Örnekleri
ArrayList Örneği
import java.util.ArrayList;
public class Ornek {
public static void main(String[] args) {
ArrayList<String> meyveler = new ArrayList<>();
meyveler.add("Elma");
meyveler.add("Muz");
meyveler.add("Çilek");
System.out.println(meyveler.get(1)); // Muz
meyveler.remove(0);
System.out.println(meyveler); // [Muz, Çilek]
}
}
LinkedList Örneği
import java.util.LinkedList;
public class Ornek {
public static void main(String[] args) {
LinkedList<String> sehirler = new LinkedList<>();
sehirler.add("İstanbul");
sehirler.add("Ankara");
sehirler.add("İzmir");
sehirler.addFirst("Bursa");
System.out.println(sehirler); // [Bursa, İstanbul, Ankara, İzmir]
sehirler.removeLast();
System.out.println(sehirler); // [Bursa, İstanbul, Ankara]
}
}
ArrayList ve LinkedList Karşılaştırması
Özellik | ArrayList | LinkedList |
---|---|---|
Veri Yapısı | Dinamik dizi (array) | Çift yönlü bağlı liste (doubly linked list) |
Ekleme | Sona hızlı, ortada yavaş | Başta/ortada hızlı, sonda hızlı |
Silme | Ortada yavaş (kaydırma gerekir) | Başta/ortada hızlı (referans güncelleme) |
Rastgele Erişim | Çok hızlı (indeks ile) | Yavaş (düğümler gezilir) |
Bellek Kullanımı | Daha az (sadece veri saklanır) | Daha fazla (her düğümde veri + 2 referans) |
Çoklu İş Parçacığı | Thread-safe değil | Thread-safe değil |
Ne Zaman Hangisini Kullanmalı?
- ArrayList: Elemanlara sık sık indeksle erişiyorsanız ve liste boyutu sık değişmiyorsa tercih edilir.
- LinkedList: Sık sık ekleme/silme yapılıyorsa ve liste başından/ortasından işlem yapılacaksa daha uygundur.