0Pricing
Java Academy · Ders

TreeSet ve NavigableSet

Benzersiz ve sıralı öğeleri saklayın; en yakın komşu sorguları için floor, ceiling, higher ve lower kullanın.

TreeSet ve NavigableSet, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.

TreeSet nedir?

TreeSet, Kırmızı-Siyah ağacı tarafından desteklenen sıralı bir kümedir. Benzersiz öğeleri artan doğal sırada (veya sağlanan bir comparator'a göre) saklar. Tüm işlemler O(log n) sürede gerçekleşir.

import java.util.TreeSet;

TreeSet<String> names = new TreeSet<>();
names.add("Charlie");
names.add("Alice");
names.add("Bob");
names.add("Alice"); // duplicate ignored

for (String s : names) System.out.print(s + " ");
// Alice Bob Charlie

NavigableSet Yöntemleri: floor, ceiling, lower, higher

TreeSet, en yakın öğeleri bulmaya yarayan gezinme yöntemleri sağlayan NavigableSet'i uygular:

TreeSet<Integer> set = new TreeSet<>();
for (int i = 10; i <= 50; i += 10) set.add(i);
// {10, 20, 30, 40, 50}

System.out.println(set.floor(25));   // 20 (greatest ≤ 25)
System.out.println(set.ceiling(25)); // 30 (smallest ≥ 25)
System.out.println(set.lower(30));   // 20 (strictly less)
System.out.println(set.higher(30));  // 40 (strictly greater)

first, last, pollFirst, pollLast

Sınırdaki öğelere erişin veya bu öğeleri kaldırın:

TreeSet<String> ts = new TreeSet<>(Set.of("cherry","apple","banana","date"));

System.out.println(ts.first());       // apple
System.out.println(ts.last());        // date
System.out.println(ts.pollFirst());   // apple (removed)
System.out.println(ts.pollLast());    // date (removed)
System.out.println(ts);              // [banana, cherry]

headSet, tailSet, subSet

Sıralı alt küme görünümleri çıkarın:

TreeSet<Integer> set = new TreeSet<>(Set.of(1,2,3,4,5,6,7,8,9,10));

System.out.println(set.headSet(5));      // [1, 2, 3, 4]
System.out.println(set.tailSet(7));      // [7, 8, 9, 10]
System.out.println(set.subSet(3, 7));    // [3, 4, 5, 6]

// Inclusive upper bound:
System.out.println(set.subSet(3, true, 7, true)); // [3,4,5,6,7]

Azalan Yineleme

Ters sıra için descendingIterator() veya descendingSet() kullanın:

TreeSet<Integer> ts = new TreeSet<>(Set.of(1,3,5,7,9));

// Descending iterator
var it = ts.descendingIterator();
while (it.hasNext()) System.out.print(it.next() + " ");
// 9 7 5 3 1

Comparator ile Özel Sıralama

Doğal olmayan bir sıraya göre sıralamak için bir Comparator geçirin; örneğin, en uzun metin önce gelecek şekilde:

TreeSet<String> byLength = new TreeSet<>(
    Comparator.comparingInt(String::length)
              .thenComparing(Comparator.naturalOrder())
);
byLength.add("Hi");
byLength.add("Hello");
byLength.add("Hey");
byLength.add("Java");

for (String s : byLength) System.out.print(s + " ");
// Hi Hey Java Hello

Kullanım Alanı: Sıralı Benzersiz Kullanıcı Adları

Kullanıcı adlarını TreeSet'te saklayarak yinelenenleri otomatik olarak kaldırın ve alfabetik sırayı koruyun:

TreeSet<String> users = new TreeSet<>();
users.add("alice");
users.add("bob");
users.add("alice"); // ignored
users.add("carol");

System.out.println(users.first()); // alice
System.out.println(users);         // [alice, bob, carol]

Kullanım Alanı: Aralık Sayımı

subSet kullanarak bir aralıktaki öğeleri sayın:

TreeSet<Integer> scores = new TreeSet<>();
for (int s : new int[]{45,62,78,55,90,88,34,71}) scores.add(s);

// Scores between 60 and 89 (inclusive)
int count = scores.subSet(60, true, 89, true).size();
System.out.println("Students in B range: " + count); // 3 (62, 78, 88... wait: 62,78,71,88=4)
// Actually: 62,71,78,88 = 4

TreeSet ve HashSet ve LinkedHashSet Karşılaştırması

İhtiyaçlarınıza göre seçim yapın:

  • HashSet: O(1) işlemler, sırasız
  • LinkedHashSet: O(1) işlemler, ekleme sırasını korur
  • TreeSet: O(log n) işlemler, sıralı düzen, gezinme yöntemleri

TreeSet, öğelerin Comparable'ı veya bir Comparator'ı uygulamasını gerektirir.

Boş Öğeler

TreeSet, doğal sıralama kullanılırken boş öğelere izin vermez; boş değer karşılaştırılamadığından bir NullPointerException fırlatılır. Boş değerleri açıkça ele alan özel bir comparator kullanılabilir.

TreeSet<String> ts = new TreeSet<>();
try {
    ts.add(null); // throws NullPointerException
} catch (NullPointerException e) {
    System.out.println("Cannot add null: " + e);
}

İş Parçacığı Güvenliği

TreeSet, iş parçacığı açısından güvenli değildir. Collections.synchronizedSortedSet() ile dışarıdan eşzamanlama yapın veya hem sıralı hem de iş parçacığı açısından güvenli olan ConcurrentSkipListSet'i kullanın.

Hızlı Kontrol

Bir TreeSet<Integer> {10, 20, 30, 40, 50} öğelerini içeriyor. set.ceiling(35) ne döndürür?

Özet: TreeSet ve NavigableSet

Temel çıkarımlar:

  • TreeSet, benzersiz sıralı öğeleri saklar (O(log n))
  • NavigableSet'i uygular: floor, ceiling, lower, higher, first, last
  • headSet, tailSet ve subSet desteklenen aralık görünümleri döndürür
  • Ters sıra için descendingSet()/descendingIterator() kullanın
  • İş parçacığı açısından güvenli değildir; eşzamanlılık için ConcurrentSkipListSet kullanın

Sıkça Sorulan Sorular

“TreeSet ve NavigableSet” dersi ücretsiz mi?

Evet — “TreeSet ve NavigableSet” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.

“TreeSet ve NavigableSet” dersinde ne öğreneceğim?

Benzersiz ve sıralı öğeleri saklayın; en yakın komşu sorguları için floor, ceiling, higher ve lower kullanın. Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Java Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“TreeSet ve NavigableSet” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. TreeMap: Sıralı Anahtar-Değer Çiftleri
  2. Alt Haritalar ve Aralık Görünümleri
  3. TreeSet ve NavigableSet
  4. Ağaç Koleksiyonlarında Özel Sıralama
← Java Academy Sayfasına Dön