0Pricing
Java Academy · Lektion

TreeMap: Sortierte Schlüssel-Wert-Paare

Verwenden Sie TreeMap, um die sortierte Reihenfolge beizubehalten, und navigieren Sie mit firstKey, lastKey, floorKey und ceilingKey.

TreeMap: Sortierte Schlüssel-Wert-Paare ist eine kostenlose Java Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Java Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.

Was ist TreeMap?

TreeMap ist eine sortierte Map-Implementierung, die auf einem Rot-Schwarz-Baum basiert. Die Schlüssel werden in aufsteigender natürlicher Ordnung (oder gemäß der Ordnung eines benutzerdefinierten Comparators) verwaltet. Alle grundlegenden Operationen haben die Komplexität 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

Das NavigableMap-Interface von TreeMap stellt Navigationsmethoden bereit, um Schlüssel relativ zu einem bestimmten Wert zu finden:

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)

Einträge navigieren

floorEntry, ceilingEntry, firstEntry und lastEntry geben den vollständigen Map.Entry statt nur des Schlüssels zurück:

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

Extrahieren Sie Bereichsansichten aus einer TreeMap. Diese Ansichten sind an die ursprüngliche Map gebunden – Änderungen in der einen spiegeln sich in der anderen wider.

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}

Inklusive und exklusive Grenzen

Verwenden Sie die überladenen Varianten für eine präzise Kontrolle über die Grenzen:

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}

Absteigende Reihenfolge

Verwenden Sie descendingMap() oder descendingKeySet(), um Schlüssel in umgekehrter Reihenfolge zu durchlaufen:

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

Entfernen Sie den ersten oder letzten Eintrag atomar und geben Sie ihn zurück – nützlich zum Erstellen von Prioritäts-Maps:

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

Anwendungsfall: Bestenliste

Eine Bestenliste muss Spieler nach Punktzahl sortieren. TreeMap sortiert automatisch nach dem Schlüssel:

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)

Anwendungsfall: Ereignisplanung

Ordnen Sie Ereignisse Zeitstempeln zu – verwenden Sie ceilingEntry, um das nächste geplante Ereignis nach einem bestimmten Zeitpunkt zu finden:

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- vs. HashMap-Performance

Wichtige Unterschiede:

  • HashMap: durchschnittlich O(1) für get/put; ungeordnet
  • TreeMap: O(log n) für get/put; nach Schlüssel sortiert
  • LinkedHashMap: durchschnittlich O(1); in Einfügereihenfolge

Verwenden Sie TreeMap, wenn Sie sortierte Schlüssel oder Bereichsabfragen benötigen. Für einfache Schlüsselsuchen ist HashMap schneller.

Threadsicherheit

TreeMap ist NICHT threadsicher. Verwenden Sie für den gleichzeitigen Zugriff ConcurrentSkipListMap, die ebenfalls die sortierte Reihenfolge beibehält, Operationen in O(log n) bietet und gleichzeitige Lese- und Schreibzugriffe unterstützt.

Kurzer Test

Sie haben eine TreeMap<Integer, String> mit den Schlüsseln {10, 20, 30, 40}. Was gibt map.floorKey(25) zurück?

Zusammenfassung: TreeMap

Wichtigste Erkenntnisse:

  • TreeMap verwaltet Schlüssel mithilfe eines Rot-Schwarz-Baums in sortierter (aufsteigender) Reihenfolge
  • Alle Operationen haben die Komplexität O(log n)
  • Navigation: firstKey, lastKey, floorKey, ceilingKey, lowerKey, higherKey
  • Bereichsansichten: subMap, headMap, tailMap (gebundene Ansichten)
  • Verwenden Sie ConcurrentSkipListMap für threadsichere sortierte Maps

Häufig gestellte Fragen

Ist die Lektion „TreeMap: Sortierte Schlüssel-Wert-Paare“ kostenlos?

Ja — der vollständige Text von „TreeMap: Sortierte Schlüssel-Wert-Paare“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Java Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „TreeMap: Sortierte Schlüssel-Wert-Paare“?

Verwenden Sie TreeMap, um die sortierte Reihenfolge beizubehalten, und navigieren Sie mit firstKey, lastKey, floorKey und ceilingKey. Du übst Java Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Java Academy zu starten?

Keine Vorkenntnisse erforderlich. Java Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „TreeMap: Sortierte Schlüssel-Wert-Paare“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Java Academy-Lektion Code schreiben und ausführen?

Ja. Jede Java Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. TreeMap: Sortierte Schlüssel-Wert-Paare
  2. Teil-Maps und Bereichsansichten
  3. TreeSet und NavigableSet
  4. Eigene Ordnung in Tree-Collections
← Zurück zu Java Academy