Skip to main content

🧩 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ürAçıklamaKarmaşı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ürAçıklamaKarmaşı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.

DurumHatalı 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)

MetotArrayListLinkedListAçıklama
add(E)O(1) amortizedO(1)Tekil ekleme
add(int, E)O(n)O(1) + traversalKonum 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)

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

  1. addAll() yinelenen (duplicate) elemanları ekler mi?

Evet, List yinelenen değerlere izin verir.

  1. NullPointerException nasıl önlenir?

addAll() öncesinde koleksiyonun null olmadığından emin olun:


if (data != null) list.addAll(data);
  1. 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.