Java Academy · Les

TreeMap: gesorteerde sleutel-waardeparen

Gebruik TreeMap om de sorteer volgorde te behouden en navigeer met firstKey, lastKey, floorKey en ceilingKey.

Les 1 van 413 stappen

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

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

Toepassing: 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()); // Review

Prestaties 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
Gratis beginnen

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

  1. TreeMap: gesorteerde sleutel-waardeparen
  2. Submaps en bereikweergaven
  3. TreeSet en NavigableSet
  4. Aangepaste ordening in Tree-collecties
← Terug naar Java Academy