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()); // PremiumsubMap, 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()); // 12Anwendungsfall: 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()); // ReviewTreeMap- 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
- TreeMap: Sortierte Schlüssel-Wert-Paare
- Teil-Maps und Bereichsansichten
- TreeSet und NavigableSet
- Eigene Ordnung in Tree-Collections