Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Java

Java TreeMap: Gesorteerde maps beheersen met praktische voorbeelden

Java TreeMap

Verken de Java TreeMap-klasse – een krachtige, natuurlijk-gesorteerde map-implementatie – met duidelijke voorbeelden, sleuteloperaties en geavanceerde navigatietechnieken.

De TreeMap-klasse is onderdeel van het Java Collections Framework en biedt een red-black tree-implementatie die entries gesorteerd houdt volgens de natuurlijke ordening van de keys of een custom Comparator. Het implementeert de NavigableMap-interface, die handige methoden toevoegt voor het doorlopen en bevragen van de map.

Java TreeMap: Gesorteerde maps beheersen met praktische voorbeelden

Een TreeMap aanmaken

Voordat je een TreeMap kunt gebruiken, importeer het pakket:

import java.util.TreeMap;

Maak dan een instantie aan:

TreeMap<Key, Value> numbers = new TreeMap<>();

Standaard worden keys gesorteerd in natuurlijke oplopende volgorde. Als je een custom volgorde nodig hebt, geef een Comparator door aan de constructor.

  • Key – unieke identifier voor elke entry.
  • Value – data geassocieerd met de key.

TreeMap-methoden overzicht

De klasse biedt een rijke set operaties. Hieronder de belangrijkste categorieën met code-snippets.


Elementen invoegen

  • put() – voegt of vervangt een key/value-paar.
  • putAll() – voegt een andere map samen in deze.
  • putIfAbsent() – voegt alleen toe als key ontbreekt.

Voorbeeld:

import java.util.TreeMap; class Main { public static void main(String[] args) { TreeMap<String, Integer> evenNumbers = new TreeMap<>(); evenNumbers.put("Two", 2); evenNumbers.put("Four", 4); evenNumbers.putIfAbsent("Six", 6); System.out.println("TreeMap van even numbers: " + evenNumbers); TreeMap<String, Integer> numbers = new TreeMap<>(); numbers.put("One", 1); numbers.putAll(evenNumbers); System.out.println("TreeMap van numbers: " + numbers); } }

Output

TreeMap van even numbers: {Four=4, Six=6, Two=2} TreeMap van numbers: {Four=4, One=1, Six=6, Two=2}

Elementen benaderen

Met Collection Views

  • entrySet() – retourneert alle key/value-paren.
  • keySet() – retourneert alle keys.
  • values() – retourneert alle values.

Voorbeeld:

import java.util.TreeMap; class Main { public static void main(String[] args) { TreeMap<String, Integer> numbers = new TreeMap<>(); numbers.put("One", 1); numbers.put("Two", 2); numbers.put("Three", 3); System.out.println("TreeMap: " + numbers); System.out.println("Key/Value mappings: " + numbers.entrySet()); System.out.println("Keys: " + numbers.keySet()); System.out.println("Values: " + numbers.values()); } }

Output

TreeMap: {One=1, Three=3, Two=2} Key/Value mappings: [One=1, Three=3, Two=2] Keys: [One, Three, Two] Values: [1, 3, 2]

Waarden ophalen

  • get() – retourneert de waarde voor een key of null als afwezig.
  • getOrDefault() – retourneert een default als key ontbreekt.

Voorbeeld:

import java.util.TreeMap; class Main { public static void main(String[] args) { TreeMap<String, Integer> numbers = new TreeMap<>(); numbers.put("One", 1); numbers.put("Two", 2); numbers.put("Three", 3); System.out.println("TreeMap: " + numbers); int value1 = numbers.get("Three"); System.out.println("Met get(): " + value1); int value2 = numbers.getOrDefault("Five", 5); System.out.println("Met getOrDefault(): " + value2); } }

Output

TreeMap: {One=1, Three=3, Two=2} Met get(): 3 Met getOrDefault(): 5

Entries verwijderen

  • remove(key) – verwijdert de entry en retourneert de waarde.
  • remove(key, value) – verwijdert alleen als key mapt naar de gespecificeerde waarde.

Voorbeeld:

import java.util.TreeMap; class Main { public static void main(String[] args) { TreeMap<String, Integer> numbers = new TreeMap<>(); numbers.put("One", 1); numbers.put("Two", 2); numbers.put("Three", 3); System.out.println("TreeMap: " + numbers); int removed = numbers.remove("Two"); System.out.println("Verwijderde waarde: " + removed); boolean removedPair = numbers.remove("Three", 3); System.out.println("Is de entry {Three=3} verwijderd? " + removedPair); System.out.println("Bijgewerkte TreeMap: " + numbers); } }

Output

TreeMap: {One=1, Three=3, Two=2} Verwijderde waarde: 2 Is de entry {Three=3} verwijderd? true Bijgewerkte TreeMap: {One=1}

Waarden vervangen

  • replace(key, value) – werkt de waarde voor een key bij.
  • replace(key, old, new) – werkt alleen bij als de huidige waarde matcht met old.
  • replaceAll(function) – past een functie toe op elke entry.

Voorbeeld:

import java.util.TreeMap; class Main { public static void main(String[] args) { TreeMap<String, Integer> numbers = new TreeMap<>(); numbers.put("First", 1); numbers.put("Second", 2); numbers.put("Third", 3); System.out.println("Originele TreeMap: " + numbers); numbers.replace("Second", 22); numbers.replace("Third", 3, 33); System.out.println("Na replace(): " + numbers); numbers.replaceAll((k, v) -> v + 2); System.out.println("Na replaceAll(): " + numbers); } }

Output

Originele TreeMap: {First=1, Second=2, Third=3} Na replace(): {First=1, Second=22, Third=33} Na replaceAll(): {First=3, Second=24, Third=35}

Omdat TreeMap NavigableMap implementeert, biedt het methoden om de structuur efficiënt te bevragen.

Eerste en laatste elementen

  • firstKey() – eerste key in volgorde.
  • firstEntry() – entry voor de eerste key.
  • lastKey() – laatste key.
  • lastEntry() – entry voor de laatste key.

Voorbeeld:

import java.util.TreeMap; class Main { public static void main(String[] args) { TreeMap<String, Integer> numbers = new TreeMap<>(); numbers.put("First", 1); numbers.put("Second", 2); numbers.put("Third", 3); System.out.println("TreeMap: " + numbers); System.out.println("Eerste Key: " + numbers.firstKey()); System.out.println("Laatste Key: " + numbers.lastKey()); System.out.println("Eerste Entry: " + numbers.firstEntry()); System.out.println("Laatste Entry: " + numbers.lastEntry()); } }

Output

TreeMap: {First=1, Second=2, Third=3} Eerste Key: First Laatste Key: Third Eerste Entry: First=1 Laatste Entry: Third=3

Ceiling, Floor, Higher en Lower

Deze methoden retourneren keys of entries relatief aan een gegeven key, wat range-queries faciliteert.

  • higherKey(), higherEntry() – volgende hogere key/entry.
  • lowerKey(), lowerEntry() – vorige lagere key/entry.
  • ceilingKey(), ceilingEntry() – kleinste key/entry ≥ gegeven key.
  • floorKey(), floorEntry() – grootste key/entry ≤ gegeven key.

Voorbeeld:

import java.util.TreeMap; class Main { public static void main(String[] args) { TreeMap<String, Integer> numbers = new TreeMap<>(); numbers.put("First", 1); numbers.put("Second", 5); numbers.put("Third", 4); numbers.put("Fourth", 6); System.out.println("TreeMap: " + numbers); System.out.println("higherKey('Fourth'): " + numbers.higherKey("Fourth")); System.out.println("higherEntry('Fourth'): " + numbers.higherEntry("Fourth")); System.out.println("lowerKey('Fourth'): " + numbers.lowerKey("Fourth")); System.out.println("lowerEntry('Fourth'): " + numbers.lowerEntry("Fourth")); System.out.println("ceilingKey('Fourth'): " + numbers.ceilingKey("Fourth")); System.out.println("ceilingEntry('Fourth'): " + numbers.ceilingEntry("Fourth")); System.out.println("floorKey('Fourth'): " + numbers.floorKey("Fourth")); System.out.println("floorEntry('Fourth'): " + numbers.floorEntry("Fourth")); } }

Output

TreeMap: {First=1, Fourth=6, Second=5, Third=4} higherKey('Fourth'): Second higherEntry('Fourth'): Second=5 lowerKey('Fourth'): First lowerEntry('Fourth'): First=1 ceilingKey('Fourth'): Fourth ceilingEntry('Fourth'): Fourth=6 floorKey('Fourth'): Fourth floorEntry('Fourth'): Fourth=6

Polling en Ranges

pollFirstEntry() en pollLastEntry() verwijderen en retourneren de eerste/laatste entries respectievelijk.

import java.util.TreeMap; class Main { public static void main(String[] args) { TreeMap<String, Integer> numbers = new TreeMap<>(); numbers.put("First", 1); numbers.put("Second", 2); numbers.put("Third", 3); System.out.println("TreeMap: " + numbers); System.out.println("pollFirstEntry(): " + numbers.pollFirstEntry()); System.out.println("pollLastEntry(): " + numbers.pollLastEntry()); System.out.println("Bijgewerkte TreeMap: " + numbers); } }

Output

TreeMap: {First=1, Second=2, Third=3} pollFirstEntry(): First=1 pollLastEntry(): Third=3 Bijgewerkte TreeMap: {Second=2}

headMap, tailMap, subMap

Deze methoden bieden views over specifieke key-ranges.

  • headMap(toKey, inclusive) – keys < toKey (of ≤ als inclusive).
  • tailMap(fromKey, inclusive) – keys ≥ fromKey (of > als exclusief).
  • subMap(fromKey, fromInclusive, toKey, toInclusive) – keys tussen de twee grenzen.

Voorbeeld:

import java.util.TreeMap; class Main { public static void main(String[] args) { TreeMap<String, Integer> numbers = new TreeMap<>(); numbers.put("First", 1); numbers.put("Second", 2); numbers.put("Third", 3); numbers.put("Fourth", 4); System.out.println("TreeMap: " + numbers); System.out.println("headMap('Fourth'): " + numbers.headMap("Fourth")); System.out.println("headMap('Fourth', true): " + numbers.headMap("Fourth", true)); System.out.println("tailMap('Second'): " + numbers.tailMap("Second")); System.out.println("tailMap('Second', false): " + numbers.tailMap("Second", false)); System.out.println("subMap('Fourth', true, 'Third', false): " + numbers.subMap("Fourth", true, "Third", false)); } }

Output

TreeMap: {First=1, Fourth=4, Second=2, Third=3} headMap('Fourth'): {First=1} headMap('Fourth', true): {First=1, Fourth=4} tailMap('Second'): {Second=2, Third=3, Fourth=4} tailMap('Second', false): {Third=3, Fourth=4} subMap('Fourth', true, 'Third', false): {Fourth=4, Second=2}

Aanvullende utility-methoden

MethodeBeschrijving
clone()Maakt een shallow copy van de map.
containsKey()Controleert aanwezigheid van een key.
containsValue()Controleert op specifieke waarde.
size()Retourneert het aantal entries.
clear()Verwijdert alle entries.

Custom key-ordening met Comparator

Om keys anders te sorteren – zoals omgekeerde volgorde of case-insensitive strings – implementeer Comparator en geef het door aan de TreeMap-constructor.

import java.util.TreeMap; import java.util.Comparator; class Main { public static void main(String[] args) { TreeMap<String, Integer> numbers = new TreeMap<>(new CustomComparator()); numbers.put("First", 1); numbers.put("Second", 2); numbers.put("Third", 3); numbers.put("Fourth", 4); System.out.println("TreeMap: " + numbers); } static class CustomComparator implements Comparator<String> { @Override public int compare(String a, String b) { // Omgekeerde natuurlijke volgorde return a.compareTo(b) * -1; } } }

Output

TreeMap: {Third=3, Second=2, Fourth=4, First=1}

Voor meer over Comparator, zie de officiële Java-documentatie.

Java

  1. Java-operators beheersen: typen, syntax en praktische voorbeelden
  2. Java-commentaar: typen, gebruik en best practices
  3. Java Enhanced For-lus beheersen: syntax, voorbeelden en best practices
  4. Java Strings beheersen: aanmaken, methodes en best practices
  5. Java interfaces meesteren: concepten, implementatie en best practices
  6. Java anonieme inner classes meesteren: definitie, syntax en praktische voorbeelden
  7. Java Try-with-resources meesteren: automatische resource management uitgelegd
  8. Java Annotaties uitgelegd: typen, plaatsing en praktische voorbeelden
  9. Java Assertions: een praktische gids voor bugdetectie en codebetrouwbaarheid
  10. Java Collection-algoritmes: Sorteren, shuffelen en meer
  11. Willekeurige Getallen Genereren in Java: Praktische Gids met Random en Math.random