🧩 Java List Veri Yapısında add() ve addAll() Metotları Nasıl Kullanılır?
✅ Bu Rehberde Ne Öğreneceksiniz?
Bu teknik rehber, Java'nın en temel koleksiyon yapılarından biri olan List veri yapısına eleman eklemenin iki ana yolu olan add() ve addAll() metotlarını öğretir.
Tekil veri girişi, toplu veri aktarımı, ArrayList vs LinkedList farkı ve performans avantajlarını uygulamalı olarak göreceksiniz.
Ayrıca, immutable listelerdeki UnsupportedOperationException hatalarını önlemeyi öğreneceksiniz.
1️⃣ add() Metodu – Tekil Eleman Ekleme
add() metodu bir listeye tek bir eleman ekler.
İki kullanım şekli vardır:
| Tür | Açıklama | Karmaşıklık |
|---|---|---|
add(E element) | Elemanı listenin sonuna ekler. | O(1) amortized |
add(int index, E element) | Belirli konuma ekler, diğerlerini kaydırır. | O(n) |
import java.util.ArrayList;
import java.util.List;
public class TekilEklemeOrnegi {
public static void main(String[] args) {
List<String> sesliler = new ArrayList<>();
sesliler.add("A");
sesliler.add("E");
System.out.println("Sona ekleme sonrası: " + sesliler);
sesliler.add(1, "İ");
System.out.println("İndeksli ekleme sonrası: " + sesliler);
}
}
🗒️ Küçük dizilerde basit, hızlı ve güvenilir yöntemdir.
2️⃣ addAll() Metodu – Toplu Eleman Ekleme
addAll() metodu, başka bir koleksiyonun tüm elemanlarını mevcut listeye tek işlemde ekler.
| Tür | Açıklama | Karmaşıklık |
|---|---|---|
addAll(Collection c) | Tüm elemanları listenin sonuna ekler. | O(n) |
addAll(int index, Collection c) | Belirtilen konuma toplu ekleme yapar. | O(n) |
import java.util.*;
public class TopluEklemeOrnegi {
public static void main(String[] args) {
List<Integer> asalSayilar = new ArrayList<>();
List<Integer> kucukAsallar = Arrays.asList(2, 3, 5);
asalSayilar.addAll(kucukAsallar);
System.out.println("İlk ekleme: " + asalSayilar);
asalSayilar.addAll(0, Arrays.asList(1));
System.out.println("Başa ekleme: " + asalSayilar);
}
}
🚀 Performans Notu:
addAll(), döngüyle yapılan birden fazla add() çağrısından 2-3 kat daha hızlıdır, çünkü belleği önceden ayırarak tekrar boyutlandırma maliyetini azaltır.
3️⃣ Hata Yönetimi – UnsupportedOperationException
Bazı List yapıları değişmez (immutable) olduğu için add() veya addAll() desteklemez.
| Durum | Hatalı Kod | Çözüm |
|---|---|---|
Arrays.asList() | Arrays.asList("A", "B").add("C"); ❌ | new ArrayList<>(Arrays.asList("A", "B")) ✅ |
List.of() (Java 9+) | List.of("X", "Y").add("Z"); ❌ | new ArrayList<>(List.of("X", "Y")) ✅ |
⏱️ Performans Karşılaştırması (Big O Notasyonu)
| Metot | ArrayList | LinkedList | Açıklama |
|---|---|---|---|
add(E) | O(1) amortized | O(1) | Tekil ekleme |
add(int, E) | O(n) | O(1) + traversal | Konum bazlı ekleme |
addAll(Collection) | O(n) | O(n) | Toplu ekleme |
addAll(int, Collection) | O(n) | O(n) | Araya ekleme |
❓ Sıkça Sorulan Sorular (SSS)
- add() ve addAll() ne zaman tercih edilmeli?
Küçük işlemler için add(), büyük veri kümeleri için addAll() daha verimlidir.
- addAll() yinelenen (duplicate) elemanları ekler mi?
Evet, List yinelenen değerlere izin verir.
- NullPointerException nasıl önlenir?
addAll() öncesinde koleksiyonun null olmadığından emin olun:
if (data != null) list.addAll(data);
- Immutable listelere neden ekleme yapılamaz?
Arrays.asList() ve List.of() sabit boyutlu liste döndürür — yapısı değiştirilemez.
🧠 Sonuç
Java'da:
Tek eleman ekleme → add()
Toplu ekleme → addAll()
Immutable hataları → new ArrayList<>(...) çözümü
Kodunuzu performansına ve yapısına göre optimize edin; hem okunabilirliği hem hızınızı artırın.
🚀 Rabisu Bulut üzerinde kendi Java projenizi oluşturun ve bu farkı deneyimleyin.