0Pricing
Java Academy · Ders

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()); // Premium

subMap, 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()); // 12

Kullanı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()); // Review

TreeMap 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

  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