TreeMap: Sıralı Anahtar-Değer Çiftleri
Sıralı düzeni korumak ve firstKey, lastKey, floorKey ile ceilingKey kullanarak gezinmek için TreeMap kullanın.
TreeMap: Sıralı Anahtar-Değer Çiftleri, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 1. 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.
TreeMap nedir?
TreeMap, Kırmızı-Siyah ağacı tarafından desteklenen sıralı bir map uygulamasıdır. Anahtarlar, artan doğal sırada (veya özel comparator sırasına göre) tutulur. Tüm temel işlemler O(log n) sürede gerçekleşir.
import java.util.TreeMap;
TreeMap<String, Integer> scores = new TreeMap<>();
scores.put("Charlie", 85);
scores.put("Alice", 92);
scores.put("Bob", 78);
// Iteration is in key order: Alice, Bob, Charlie
for (var entry : scores.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}firstKey, lastKey, floorKey, ceilingKey
TreeMap'in NavigableMap arayüzü, belirli bir değere göre anahtarları bulmaya yarayan gezinme yöntemleri sunar:
TreeMap<Integer, String> map = new TreeMap<>();
map.put(10, "ten"); map.put(20, "twenty"); map.put(30, "thirty"); map.put(40, "forty");
System.out.println(map.firstKey()); // 10
System.out.println(map.lastKey()); // 40
System.out.println(map.floorKey(25)); // 20 (largest key ≤ 25)
System.out.println(map.ceilingKey(25)); // 30 (smallest key ≥ 25)
System.out.println(map.lowerKey(20)); // 10 (strictly less)
System.out.println(map.higherKey(20)); // 30 (strictly greater)Girdilerde Gezinme
floorEntry, ceilingEntry, firstEntry ve lastEntry, yalnızca anahtarı değil, tam Map.Entry nesnesini döndürür:
TreeMap<Integer, String> prices = new TreeMap<>();
prices.put(100, "Budget"); prices.put(300, "Standard"); prices.put(700, "Premium");
var entry = prices.floorEntry(350);
System.out.println(entry.getKey() + ": " + entry.getValue()); // 300: Standard
var top = prices.lastEntry();
System.out.println(top.getValue()); // PremiumsubMap, headMap, tailMap
Bir TreeMap'ten aralık görünümleri çıkarın. Bu görünümler özgün map tarafından desteklenir; birindeki değişiklik diğerine yansır.
TreeMap<Integer, String> map = new TreeMap<>();
for (int i = 1; i <= 10; i++) map.put(i, "v"+i);
// Keys from 3 (inclusive) to 7 (exclusive)
System.out.println(map.subMap(3, 7)); // {3=v3, 4=v4, 5=v5, 6=v6}
// Keys strictly less than 5
System.out.println(map.headMap(5)); // {1=v1, 2=v2, 3=v3, 4=v4}
// Keys >= 7
System.out.println(map.tailMap(7)); // {7=v7, 8=v8, 9=v9, 10=v10}Dahil Edilen/Dışlanan Sınırlar
Sınırları ayrıntılı biçimde denetlemek için aşırı yüklenmiş varyantları kullanın:
TreeMap<Integer, String> map = new TreeMap<>();
for (int i = 1; i <= 10; i++) map.put(i*10, "v"+i);
// From 30 (inclusive) to 60 (inclusive)
System.out.println(map.subMap(30, true, 60, true));
// {30=v3, 40=v4, 50=v5, 60=v6}Azalan Sıra
Anahtarlar üzerinde ters sırada yineleme yapmak için descendingMap() veya descendingKeySet() kullanın:
TreeMap<String, Integer> tm = new TreeMap<>();
tm.put("A", 1); tm.put("C", 3); tm.put("B", 2);
for (String key : tm.descendingKeySet()) {
System.out.print(key + " "); // C B A
}pollFirstEntry ve pollLastEntry
İlk veya son girdiyi atomik olarak kaldırıp döndürün; bu yöntemler öncelik map'leri oluşturmak için kullanışlıdır:
TreeMap<Integer, String> events = new TreeMap<>();
events.put(8, "Breakfast");
events.put(12, "Lunch");
events.put(18, "Dinner");
var first = events.pollFirstEntry(); // removes 8=Breakfast
System.out.println(first.getValue() + " removed");
System.out.println(events.firstKey()); // 12Kullanım Alanı: Sıralama Tablosu
Bir sıralama tablosunda oyuncular puana göre sıralanmalıdır. TreeMap, anahtara göre otomatik olarak sıralama yapar:
TreeMap<Integer, String> leaderboard = new TreeMap<>(Comparator.reverseOrder());
leaderboard.put(1200, "Alice");
leaderboard.put(1500, "Bob");
leaderboard.put(900, "Carol");
int rank = 1;
for (var e : leaderboard.entrySet()) {
System.out.println(rank++ + ". " + e.getValue() + " (" + e.getKey() + ")");
}
// 1. Bob (1500)
// 2. Alice (1200)
// 3. Carol (900)Kullanım Alanı: Etkinlik Planlayıcı
Zaman damgalarını etkinliklerle eşleştirin; belirli bir zamandan sonraki bir sonraki planlanmış etkinliği bulmak için ceilingEntry kullanın:
import java.time.LocalTime;
TreeMap<LocalTime, String> schedule = new TreeMap<>();
schedule.put(LocalTime.of(9,0), "Standup");
schedule.put(LocalTime.of(14,0), "Review");
schedule.put(LocalTime.of(17,0), "Retro");
LocalTime now = LocalTime.of(11, 30);
var next = schedule.ceilingEntry(now);
System.out.println("Next: " + next.getValue()); // ReviewTreeMap ve HashMap Performans Karşılaştırması
Temel karşılaştırma:
- HashMap: get/put işlemleri ortalama O(1); sırasızdır
- TreeMap: get/put işlemleri O(log n); anahtara göre sıralıdır
- LinkedHashMap: ortalama O(1); ekleme sırasını korur
Sıralı anahtarlara veya aralık sorgularına ihtiyacınız olduğunda TreeMap kullanın. Basit anahtar aramalarında HashMap daha hızlıdır.
İş Parçacığı Güvenliği
TreeMap, iş parçacığı açısından güvenli değildir. Eşzamanlı erişim için, sıralı düzeni de koruyan ve O(log n) işlemler sunan ConcurrentSkipListMap kullanın; bu yapı eşzamanlı okuma/yazma işlemlerini destekler.
Hızlı Kontrol
TreeMap<Integer, String> türünde, anahtarları {10, 20, 30, 40} olan bir map'iniz var. map.floorKey(25) ne döndürür?
Özet: TreeMap
Temel çıkarımlar:
- TreeMap, anahtarları Kırmızı-Siyah ağacı aracılığıyla sıralı (artan) düzende tutar
- Tüm işlemler O(log n) sürede gerçekleşir
- Gezinme: firstKey, lastKey, floorKey, ceilingKey, lowerKey, higherKey
- Aralık görünümleri: subMap, headMap, tailMap (desteklenen görünümler)
- İş parçacığı açısından güvenli sıralı map'ler için ConcurrentSkipListMap kullanın
Sıkça Sorulan Sorular
“TreeMap: Sıralı Anahtar-Değer Çiftleri” dersi ücretsiz mi?
Evet — “TreeMap: Sıralı Anahtar-Değer Çiftleri” 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.
“TreeMap: Sıralı Anahtar-Değer Çiftleri” dersinde ne öğreneceğim?
Sıralı düzeni korumak ve firstKey, lastKey, floorKey ile ceilingKey kullanarak gezinmek için TreeMap 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 1. dersidir.
“TreeMap: Sıralı Anahtar-Değer Çiftleri” 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