Skip to main content

Java LinkedList Kurulumu ve Kullanımı 🚀

🧠 Bu Rehberde Ne Öğreneceksiniz?

Bu rehberde, Java LinkedList sınıfının ne işe yaradığını, List ve Deque arayüzleriyle nasıl çalıştığını ve çift yönlü bağlı liste (Doubly Linked List) yapısını öğreneceksiniz.
Ayrıca Generics ile tip güvenliği sağlamayı, dizilerle dönüşüm işlemlerini ve hangi durumlarda LinkedList’in avantajlı olduğunu göreceksiniz.


🔍 Java LinkedList Nedir?

Java LinkedList, List ve Deque arayüzlerinin bir uygulamasıdır.
Dahili olarak çift yönlü bağlı liste yapısını kullanır. Her eleman (Node), kendinden önceki ve sonraki düğümleri işaret eder.

⚙️ Temel Özellikler

  • Sıralı bir koleksiyondur, ekleme sırasını korur.
  • Tekrarlanan ve null elemanları destekler.
  • Thread-safe değildir (varsayılan olarak senkronize değildir).
    Gerekirse Collections.synchronizedList() ile güvenli hale getirilebilir.
  • RandomAccess arayüzünü desteklemez; erişim sıralıdır.
  • Java 8+ sürümlerinde Stream API ile kullanılabilir.
  • Java 9’da Immutable LinkedList oluşturmak için fabrika metotları eklenmiştir.

🧩 LinkedList’in Temel Metotları

1️⃣ List Arayüzünden Gelen Metotlar

MetotAçıklama
int size()Listedeki eleman sayısını döndürür.
boolean isEmpty()Listenin boş olup olmadığını kontrol eder.
boolean add(E e)Elemanı listenin sonuna ekler.
E get(int index)Belirtilen konumdaki elemanı döndürür.
void clear()Listedeki tüm elemanları siler.

2️⃣ Deque Arayüzüne Özgü Metotlar

MetotAçıklama
void addFirst(E e)Elemanı listenin başına ekler.
void addLast(E e)Elemanı listenin sonuna ekler.
E getFirst()İlk elemanı döndürür, liste boşsa hata verir.
E getLast()Son elemanı döndürür, liste boşsa hata verir.
E removeFirst()İlk elemanı siler ve döndürür.
E pollLast()Son elemanı siler, boşsa null döndürür.

💡 Jenerikler (Generics) ile Kullanım

🧱 1. Jeneriksiz LinkedList (Önerilmez)

// Jeneriksiz LinkedList oluşturma
List names = new LinkedList();
names.add("Ayşe");
names.add("rabisu.cloud");
names.add(1987);

System.out.println("Liste içeriği: " + names);
System.out.println("Liste boyutu: " + names.size());

💬 Açıklama:

Farklı veri tipleri eklenebilir ancak tip güvenliği yoktur. Bu nedenle derleme hatalarını önlemek için generics kullanımı önerilir.

🧱 2. Jenerikli LinkedList (Önerilen)


// Sadece String kabul eden LinkedList
List<String> names = new LinkedList<>();
names.add("tr1-node01");
names.add("tr1-node02");
names.add("tr1-node03");

System.out.println("Liste içeriği: " + names);
System.out.println("Liste boyutu: " + names.size());

💬 Açıklama:

Generics sayesinde yalnızca belirtilen türde veri eklenebilir. Bu hem güvenli hem performanslıdır.


🔁 Dönüşüm İşlemleri

1️⃣ Diziden LinkedList’e Dönüştürme


Integer[] sunucu_idler = {101, 102, 103, 104, 105};
List<Integer> idListesi = new LinkedList<>();

for (Integer id : sunucu_idler) {
idListesi.add(id);
}
System.out.println(idListesi);

💬 Açıklama:

Bir dizideki elemanlar for döngüsüyle LinkedList’e aktarılır. Bu yöntem, küçük veri kümelerinde oldukça kullanışlıdır.

2️⃣ LinkedList’ten Diziye Dönüştürme


import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;

List<Integer> idListesi = new LinkedList<>();
idListesi.add(10);
idListesi.add(20);
idListesi.add(30);

Integer[] idDizisi = new Integer[idListesi.size()];
idDizisi = idListesi.toArray(idDizisi);

System.out.println(Arrays.toString(idDizisi));

💬 Açıklama:

toArray() metodu, listedeki elemanları diziye kopyalar. Bu işlem, koleksiyonları dış sistemlere aktarmak için idealdir.


🚀 Ne Zaman LinkedList Kullanılmalı?

DurumAçıklamaNeden
En İyiListenin ortasına sık sık eleman eklenip siliniyorsaDüğüm bağlantıları sayesinde hızlıdır (kaydırma gerekmez).
En KötüRastgele erişim gerekiyorsa (get(index))LinkedList sıralı erişim sağladığı için yavaştır.

💬 Kısa Özet:

Ekleme/silme işlemleri yoğunsa → LinkedList

Hızlı erişim gerekiyorsa → ArrayList


⚡ Gerçek Hayattan Örnek Senaryolar

Sunucu yönetim panellerinde, görev sıralarını veya log geçmişini tutmak için.

Mesaj kuyrukları (message queue) veya işlem yığınları (stack) oluşturmak için.

Dinamik veri akışları olan backend sistemlerinde ekleme/silme optimizasyonu amacıyla.


❓ Sıkça Sorulan Sorular (SSS)

  1. LinkedList ve ArrayList Arasındaki Fark Nedir?

ArrayList rastgele erişimde hızlıdır; LinkedList ekleme/silmede daha hızlıdır.

  1. LinkedList Thread-safe midir?

Hayır, ama Collections.synchronizedList() ile güvenli hale getirilebilir.

  1. Neden RandomAccess arayüzünü uygulamaz?

Çünkü elemanlara sıralı erişim sağlar, rastgele erişim O(n) karmaşıklığındadır.

  1. Kuyruk (Queue) veya Yığın (Stack) olarak kullanılabilir mi?

Evet, Deque arayüzü sayesinde add(), poll(), push(), pop() gibi işlemleri destekler.

  1. Elemanlar bellekte nasıl saklanır?

Her eleman bir Node nesnesidir; veri + önceki/sonraki düğüm bağlantılarını içerir. Elemanlar bellekte ardışık değil, bağlantılı olarak tutulur.


🧩 Sonuç

Java LinkedList, koleksiyon yönetiminde esneklik sağlayan güçlü bir veri yapısıdır. Özellikle sık ekleme/silme yapılan sistemlerde performans avantajı sunar. Rastgele erişimin ön planda olduğu durumlarda ise ArrayList tercih edilmelidir.

🚀 Java projelerinizi yüksek performanslı sunucularda çalıştırmak için Rabisu Bulut platformunda hemen deneyin!