Java Academy · Lektion

TreeMap: sorterede nøgle-værdi-par

Brug TreeMap til at bevare sorteringsrækkefølgen, og navigér med firstKey, lastKey, floorKey og ceilingKey.

Lektion 1 af 413 trin

TreeMap: sorterede nøgle-værdi-par er en gratis Java Academy-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Java Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Java Academy-kurset indeholder 4 lektioner i alt.

Hvad er TreeMap?

TreeMap er en implementering af et sorteret map, der er baseret på et rød-sort-træ. Nøglerne holdes i stigende naturlig rækkefølge eller i rækkefølgen fra en brugerdefineret comparator. Alle grundlæggende operationer har kompleksiteten 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

TreeMaps NavigableMap-interface indeholder navigationsmetoder til at finde nøgler i forhold til en given værdi:

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)

Navigering blandt poster

floorEntry, ceilingEntry, firstEntry og lastEntry returnerer hele Map.Entry i stedet for kun nøglen:

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

Udtræk intervalvisninger fra en TreeMap. Visningerne er knyttet til det oprindelige map — ændringer i den ene afspejles i den anden.

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 og eksklusive grænser

Brug de overbelastede varianter for at få detaljeret kontrol over grænserne:

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}

Faldende rækkefølge

Brug descendingMap() eller descendingKeySet() til at gennemløbe nøglerne i omvendt rækkefølge:

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

Fjern og returnér den første eller sidste post atomisk — nyttigt til at opbygge prioritetsmaps:

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

Anvendelse: Rangliste

En rangliste skal have spillerne sorteret efter score. TreeMap sorterer automatisk efter nøglen:

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)

Anvendelse: Begivenhedsplanlægger

Knyt tidsstempler til begivenheder — brug ceilingEntry til at finde den næste planlagte begivenhed efter et givet tidspunkt:

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 kontra HashMap: ydeevne

Sammenligning af nøglebaserede map-typer:

  • HashMap: get/put har i gennemsnit O(1); ingen bestemt rækkefølge
  • TreeMap: get/put har O(log n); sorteret efter nøgle
  • LinkedHashMap: har i gennemsnit O(1); sorteret efter indsættelse

Brug TreeMap, når du har brug for sorterede nøgler eller intervalforespørgsler. HashMap er hurtigere til simple opslag med nøgler.

Trådsikkerhed

TreeMap er IKKE trådsikker. Ved samtidig adgang kan du bruge ConcurrentSkipListMap, som også bevarer sorteret rækkefølge, har operationer på O(log n) og understøtter samtidige læsninger og skrivninger.

Hurtigt tjek

Du har en TreeMap<Integer, String> med nøglerne {10, 20, 30, 40}. Hvad returnerer map.floorKey(25)?

Opsamling: TreeMap

Vigtigste pointer:

  • TreeMap holder nøglerne i sorteret, stigende rækkefølge via et rød-sort-træ
  • Alle operationer har kompleksiteten O(log n)
  • Navigation: firstKey, lastKey, floorKey, ceilingKey, lowerKey, higherKey
  • Intervalvisninger: subMap, headMap, tailMap, som er knyttet til det oprindelige map
  • Brug ConcurrentSkipListMap til trådsikre sorterede maps
Gratis at komme i gang

Lær Java med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
104
Lektioner
374

Ofte stillede spørgsmål

Er lektionen “TreeMap: sorterede nøgle-værdi-par” gratis?

Ja — hele teksten til “TreeMap: sorterede nøgle-værdi-par” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Java Academy-kurset, skal du opgradere til CoddyKit PRO. Java Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “TreeMap: sorterede nøgle-værdi-par”?

Brug TreeMap til at bevare sorteringsrækkefølgen, og navigér med firstKey, lastKey, floorKey og ceilingKey. Du øver dig i Java Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Java Academy?

Der kræves ingen tidligere erfaring. Java Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.

Hvor lang tid tager lektionen “TreeMap: sorterede nøgle-værdi-par”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Java Academy-lektion?

Ja. Alle Java Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. TreeMap: sorterede nøgle-værdi-par
  2. Delkort og intervalvisninger
  3. TreeSet og NavigableSet
  4. Brugerdefineret sortering i Tree-samlinger
← Tilbage til Java Academy