Sobes.tech
Junior

Java'da List ve Set arayüzleri arasındaki fark nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Java'da List ve Set arayüzleri arasındaki temel farklar şunlardır:

  • Elemanların sırası:

    • List, elemanların eklenme sırasını korur. Elemanlar 0'dan başlayan indekslere sahiptir.
    • Set, elemanların sırasını garanti etmez. Bazı uygulamalar belirli bir sıralama içerebilir (örneğin, LinkedHashSet, TreeSet), ancak Set arayüzü bunu zorunlu kılmaz.
  • Çift elemanlar (Dublikatlar):

    • List, yinelenen elemanlara izin verir.
    • Set, yinelenen elemanlara izin vermez. Bir tekrar eklenmeye çalışıldığında, ekleme işlemi ya göz ardı edilir ya da false döner (uygulamaya ve metoda bağlı olarak).
  • Performans:

    • List'in ortasında ekleme ve silme işlemleri, özellikle ArrayList için, Set'e göre daha yavaş olabilir.
    • Set'lerde (HashSet gibi) bir elemanın var olup olmadığını kontrol etme (contains) genellikle daha hızlıdır (ortalama O(1)) karşılaştırıldığında List (ortalama O(n)).
    • İndeks tabanlı işlemler (get, set) sadece List'de mevcuttur.
  • Uygulamalar:

    • Tipik List uygulamaları: ArrayList, LinkedList, Vector.
    • Tipik Set uygulamaları: HashSet, LinkedHashSet, TreeSet.

İşte farkları gösteren örnekler:

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class CollectionDifferences {

    public static void main(String[] args) {

        // List yinelenenlere izin verir ve sırasını korur
        List<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Apple"); // Yinelenen ekleniyor
        System.out.println("List: " + list); // [Apple, Banana, Apple] gösterir
        System.out.println("İndeks 1'deki eleman: " + list.get(1)); // İndeks ile erişim

        // Set yinelenenlere izin vermez ve sırası garanti edilmez (HashSet için)
        Set<String> set = new HashSet<>();
        set.add("Apple");
        set.add("Banana");
        set.add("Apple"); // Yinelenen eklenmeye çalışılıyor - göz ardı edilir
        System.out.println("Set: " + set); // [Apple, Banana] veya [Banana, Apple] gibi gösterir
        // set.get(1); // Derleme hatası - indeks ile erişim yok
    }
}

Karşılaştırma tablosu:

Özellik List Set
Sıralama Garantili (ekleme sırası) Garantili değil (HashSet, TreeSet sıralı sıralama sağlar)
Yinelenenler İzin verilir İzin verilmez
İndeks ile erişim Mümkün (get(int index)) Mümkün değil
contains() performansı Ortalama O(n) (ArrayList için) Ortalama O(1) (HashSet için)
Tipik uygulamalar ArrayList, LinkedList, Vector HashSet, LinkedHashSet, TreeSet