TreeMap: gesorteerde sleutel-waardeparen
Gebruik TreeMap om de sorteer volgorde te behouden en navigeer met firstKey, lastKey, floorKey en ceilingKey.
TreeMap: gesorteerde sleutel-waardeparen is een gratis Java Academy-les op CoddyKit. Dit is les 1 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Java Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Java Academy bevat in totaal 4 lessen.
Wat is TreeMap?
TreeMap is een gesorteerde map-implementatie op basis van een rood-zwarte boom. Sleutels worden bijgehouden in oplopende natuurlijke volgorde (of in de volgorde van een aangepaste comparator). Alle basisbewerkingen zijn 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
De NavigableMap-interface van TreeMap biedt navigatiemethoden om sleutels te vinden ten opzichte van een bepaalde waarde:
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)Door vermeldingen navigeren
floorEntry, ceilingEntry, firstEntry en lastEntry retourneren de volledige Map.Entry in plaats van alleen de sleutel:
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
Haal weergaven van bereiken uit een TreeMap. Deze weergaven zijn gekoppeld aan de oorspronkelijke map — wijzigingen in de ene worden in de andere weerspiegeld.
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}Inclusieve en exclusieve grenzen
Gebruik de varianten met extra argumenten voor nauwkeurige controle over de 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}Aflopende volgorde
Gebruik descendingMap() of descendingKeySet() om sleutels in omgekeerde volgorde te doorlopen:
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 en pollLastEntry
Verwijder de eerste of laatste vermelding atomair en retourneer deze — handig voor het bouwen van prioriteitsmaps:
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()); // 12Toepassing: ranglijst
Een ranglijst moet spelers op score gesorteerd weergeven. TreeMap sorteert automatisch op sleutel:
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)Toepassing: gebeurtenisplanner
Koppel tijdstempels aan gebeurtenissen — gebruik ceilingEntry om de eerstvolgende geplande gebeurtenis na een bepaald tijdstip te vinden:
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()); // ReviewPrestaties van TreeMap versus HashMap
Belangrijkste verschillen:
- HashMap: gemiddeld O(1) voor get/put; zonder vaste volgorde
- TreeMap: O(log n) voor get/put; gesorteerd op sleutel
- LinkedHashMap: gemiddeld O(1); in invoegvolgorde
Gebruik TreeMap wanneer je gesorteerde sleutels of bereikquery's nodig hebt. HashMap is sneller voor eenvoudig zoeken op sleutel.
Threadveiligheid
TreeMap is NIET thread-safe. Gebruik voor gelijktijdige toegang ConcurrentSkipListMap, die de gesorteerde volgorde eveneens behoudt met bewerkingen in O(log n) en gelijktijdig lezen en schrijven ondersteunt.
Korte controle
Je hebt een TreeMap<Integer, String> met de sleutels {10, 20, 30, 40}. Wat retourneert map.floorKey(25)?
Samenvatting: TreeMap
Belangrijkste punten:
- TreeMap houdt sleutels in gesorteerde (oplopende) volgorde bij via een rood-zwarte boom
- Alle bewerkingen zijn O(log n)
- Navigatie: firstKey, lastKey, floorKey, ceilingKey, lowerKey, higherKey
- Bereikweergaven: subMap, headMap, tailMap (gekoppelde weergaven)
- Gebruik ConcurrentSkipListMap voor threadveilige gesorteerde maps
Leer Java met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 104
- Lessen
- 374
Veelgestelde vragen
Is de les “TreeMap: gesorteerde sleutel-waardeparen” gratis?
Ja — de volledige tekst van “TreeMap: gesorteerde sleutel-waardeparen” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Java Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Java Academy bevat in totaal 4 lessen.
Wat leer ik in “TreeMap: gesorteerde sleutel-waardeparen”?
Gebruik TreeMap om de sorteer volgorde te behouden en navigeer met firstKey, lastKey, floorKey en ceilingKey. Je oefent met Java Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Java Academy te beginnen?
Ervaring vooraf is niet nodig. Java Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.
Hoe lang duurt de les “TreeMap: gesorteerde sleutel-waardeparen”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Java Academy?
Ja. Elke les over Java Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- TreeMap: gesorteerde sleutel-waardeparen
- Submaps en bereikweergaven
- TreeSet en NavigableSet
- Aangepaste ordening in Tree-collecties