0Pricing
Java Academy · Pelajaran

TreeMap: Pasangan Kunci-Nilai Terurut

Gunakan TreeMap untuk mempertahankan urutan terurut dan menavigasi dengan firstKey, lastKey, floorKey, dan ceilingKey.

TreeMap: Pasangan Kunci-Nilai Terurut adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.

Apa itu TreeMap?

TreeMap adalah implementasi map terurut yang didukung oleh pohon Merah-Hitam. Kunci dipertahankan dalam urutan alami menaik (atau urutan comparator khusus). Semua operasi dasar memiliki kompleksitas O(log n).

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

Antarmuka NavigableMap milik TreeMap menyediakan metode navigasi untuk menemukan kunci yang posisinya relatif terhadap nilai tertentu:

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)

Menavigasi Entry

floorEntry, ceilingEntry, firstEntry, lastEntry mengembalikan Map.Entry lengkap, bukan hanya kuncinya:

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

Ekstrak tampilan rentang dari TreeMap. Tampilan ini didukung oleh map asli—perubahan pada salah satunya tercermin pada yang lain.

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}

Batas Inklusif/Eksklusif

Gunakan varian yang dibebani berlebih untuk mengatur batas secara lebih terperinci:

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}

Urutan menurun

Gunakan descendingMap() atau descendingKeySet() untuk melakukan iterasi kunci dalam urutan terbalik:

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 dan pollLastEntry

Hapus dan kembalikan entry pertama atau terakhir secara atomik—berguna untuk membuat map prioritas:

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

Kasus Penggunaan: Papan Peringkat

Papan peringkat memerlukan pemain yang diurutkan berdasarkan skor. TreeMap mengurutkan berdasarkan kunci secara otomatis:

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)

Kasus Penggunaan: Penjadwal Peristiwa

Petakan stempel waktu ke peristiwa—gunakan ceilingEntry untuk menemukan peristiwa terjadwal berikutnya setelah waktu tertentu:

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

Kinerja TreeMap vs HashMap

Perbandingan utama:

  • HashMap: get/put rata-rata O(1); tidak berurutan
  • TreeMap: get/put O(log n); diurutkan berdasarkan kunci
  • LinkedHashMap: rata-rata O(1); berdasarkan urutan penyisipan

Gunakan TreeMap saat Anda memerlukan kunci terurut atau kueri rentang. HashMap lebih cepat untuk pencarian kunci sederhana.

Keamanan Thread

TreeMap TIDAK aman untuk thread. Untuk akses bersamaan, gunakan ConcurrentSkipListMap yang juga mempertahankan urutan terurut dengan operasi O(log n) serta mendukung pembacaan/penulisan bersamaan.

Pemeriksaan Singkat

Anda memiliki TreeMap<Integer, String> dengan kunci {10, 20, 30, 40}. Apa yang dikembalikan oleh map.floorKey(25)?

Ringkasan: TreeMap

Inti penting:

  • TreeMap mempertahankan kunci dalam urutan terurut (menaik) melalui pohon Merah-Hitam
  • Semua operasi memiliki kompleksitas O(log n)
  • Navigasi: firstKey, lastKey, floorKey, ceilingKey, lowerKey, higherKey
  • Tampilan rentang: subMap, headMap, tailMap (tampilan yang didukung)
  • Gunakan ConcurrentSkipListMap untuk map terurut yang aman untuk thread

Pertanyaan yang Sering Diajukan

Apakah pelajaran “TreeMap: Pasangan Kunci-Nilai Terurut” gratis?

Ya — teks lengkap “TreeMap: Pasangan Kunci-Nilai Terurut” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “TreeMap: Pasangan Kunci-Nilai Terurut”?

Gunakan TreeMap untuk mempertahankan urutan terurut dan menavigasi dengan firstKey, lastKey, floorKey, dan ceilingKey. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Java Academy?

Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “TreeMap: Pasangan Kunci-Nilai Terurut” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?

Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. TreeMap: Pasangan Kunci-Nilai Terurut
  2. Submap dan Tampilan Rentang
  3. TreeSet dan NavigableSet
  4. Pengurutan Kustom pada Koleksi Tree
← Kembali ke Java Academy