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 CharlieNavigableSet 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 1Comparator 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 HelloKullanı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 = 4TreeSet 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
- TreeMap: Sıralı Anahtar-Değer Çiftleri
- Alt Haritalar ve Aralık Görünümleri
- TreeSet ve NavigableSet
- Ağaç Koleksiyonlarında Özel Sıralama