Java Collections Framework’ün önemli parçalarından biri olan Set arayüzü, benzersiz (unique) elemanları depolamak için kullanılır. Set’in en çok tercih edilen iki implementasyonu HashSet ve TreeSet’tir. Bu yazıda Set, HashSet ve TreeSet nedir, nasıl çalışır, farkları nelerdir, avantajları ve kullanım örnekleriyle detaylıca açıklıyoruz.
Set Nedir?
Set
, tekrarlanan elemanları kabul etmeyen, benzersiz veri depolayan bir koleksiyon arayüzüdür. Sıralama garantisi vermez. Temel olarak matematikteki kümeye benzer.
Java’da Set arayüzünü implement eden birçok sınıf vardır, en popülerleri:
HashSet
TreeSet
LinkedHashSet
(sıralamayı korur)
HashSet Nedir?
HashSet
, verileri hash tabanlı bir yapıda depolar. Elemanlar benzersizdir ve sıralama garantisi yoktur. Performans olarak hızlıdır.
Özellikleri
- Elemanların sıralaması rastgeledir, korunmaz.
- Eleman ekleme, silme ve arama işlemleri ortalama O(1) zaman alır.
null
eleman eklenebilir.- Thread-safe değildir.
TreeSet Nedir?
TreeSet
, verileri kırmızı-siyah ağaç (Red-Black Tree) yapısı ile depolar. Bu nedenle elemanlar doğal sıralarına göre ya da verilen Comparator’a göre sıralı tutulur.
Özellikleri
- Elemanlar sıralı tutulur (Comparable veya Comparator gerekir).
- Eleman ekleme, silme ve arama işlemleri O(log n) zaman alır.
null
eleman eklenemez.- Thread-safe değildir.
Kullanım Örnekleri
HashSet Örneği
import java.util.HashSet;
public class Ornek {
public static void main(String[] args) {
HashSet<String> meyveler = new HashSet<>();
meyveler.add("Elma");
meyveler.add("Muz");
meyveler.add("Elma"); // Tekrar eklenmez
System.out.println(meyveler); // [Elma, Muz] (sıra değişken)
}
}
TreeSet Örneği
import java.util.TreeSet;
public class Ornek {
public static void main(String[] args) {
TreeSet<String> sehirler = new TreeSet<>();
sehirler.add("İstanbul");
sehirler.add("Ankara");
sehirler.add("İzmir");
System.out.println(sehirler); // [Ankara, İstanbul, İzmir] (alfabetik sıralı)
}
}
HashSet ve TreeSet Karşılaştırması
Özellik | HashSet | TreeSet |
---|---|---|
Veri Yapısı | Hash tablosu | Kırmızı-siyah ağaç |
Sıralama | Yok | Var (doğal sıralama) |
Performans | Ortalama O(1) | O(log n) |
null Eleman | İzinli | İzinli değil |
Kullanım Alanı | Hızlı benzersiz koleksiyonlar | Sıralı benzersiz koleksiyonlar |
Ne Zaman Hangisini Kullanmalı?
- HashSet: Hızlı erişim ve ekleme/silme gereken, sıralama önemsizse ideal.
- TreeSet: Elemanların sıralı tutulması gerektiğinde, örneğin alfabetik listeleme veya sıralı arama yapılacaksa kullanılır.