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-boomkaart

Java TreeMap

In deze zelfstudie leren we over de Java TreeMap-klasse en zijn bewerkingen aan de hand van voorbeelden.

De TreeMap klasse van het Java-verzamelingsraamwerk biedt de implementatie van de boomgegevensstructuur.

Het implementeert de NavigableMap-interface.


Een TreeMap maken

Om een ​​TreeMap . aan te maken , moeten we de java.util.TreeMap . importeren pakket eerst. Nadat we het pakket hebben geïmporteerd, kunnen we als volgt een TreeMap . maken in Java.

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

In de bovenstaande code hebben we een TreeMap . gemaakt met de naam nummers zonder enige argumenten. In dit geval zijn de elementen in TreeMap worden op natuurlijke wijze gesorteerd (oplopende volgorde).

We kunnen de sortering van elementen echter aanpassen met behulp van de Comparator koppel. We zullen er later in deze tutorial meer over leren.

Hier,

  • Sleutel - een unieke identificatie die wordt gebruikt om elk element (waarde) in een kaart te associëren
  • Waarde - elementen geassocieerd met sleutels in een kaart

Methoden van TreeMap

De TreeMap class biedt verschillende methoden waarmee we bewerkingen op de kaart kunnen uitvoeren.


Elementen invoegen in TreeMap

  • put() - voegt de opgegeven sleutel/waarde-toewijzing (invoer) in op de kaart
  • putAll() - voegt alle vermeldingen van de opgegeven kaart in op deze kaart
  • putIfAbsent() - voegt de gespecificeerde sleutel/waarde-toewijzing toe aan de kaart als de gespecificeerde sleutel niet aanwezig is in de kaart

Bijvoorbeeld,

import java.util.TreeMap;

class Main {
    public static void main(String[] args) {
        // Creating TreeMap of even numbers
        TreeMap<String, Integer> evenNumbers = new TreeMap<>();

        // Using put()
        evenNumbers.put("Two", 2);
        evenNumbers.put("Four", 4);

        // Using putIfAbsent()
        evenNumbers.putIfAbsent("Six", 6);
        System.out.println("TreeMap of even numbers: " + evenNumbers);

        //Creating TreeMap of numbers
        TreeMap<String, Integer> numbers = new TreeMap<>();
        numbers.put("One", 1);

        // Using putAll()
        numbers.putAll(evenNumbers);
        System.out.println("TreeMap of numbers: " + numbers);
    }
}

Uitvoer

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

Toegang tot TreeMap-elementen

1. Gebruik entrySet(), keySet() en values()

  • entrySet() - retourneert een set van alle sleutel/waarden mapping (invoer) van een treemap
  • keySet() - geeft een set van alle sleutels van een boomkaart terug
  • values() - geeft een set van alle kaarten van een boomkaart terug

Bijvoorbeeld,

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);

        // Using entrySet()
        System.out.println("Key/Value mappings: " + numbers.entrySet());

        // Using keySet()
        System.out.println("Keys: " + numbers.keySet());

        // Using values()
        System.out.println("Values: " + numbers.values());
    }
}

Uitvoer

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

2. Get() en getOrDefault() gebruiken

  • get() - Retourneert de waarde die is gekoppeld aan de opgegeven sleutel. Retourneert null als de sleutel niet wordt gevonden.
  • getOrDefault() - Retourneert de waarde die is gekoppeld aan de opgegeven sleutel. Retourneert de opgegeven standaardwaarde als de sleutel niet wordt gevonden.

Bijvoorbeeld,

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);

        // Using get()
        int value1 = numbers.get("Three");
        System.out.println("Using get(): " + value1);

        // Using getOrDefault()
        int value2 = numbers.getOrDefault("Five", 5);
        System.out.println("Using getOrDefault(): " + value2);
    }
}

Uitvoer

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

Hier, de getOrDefault() methode vindt de sleutel Five niet . Daarom retourneert het de opgegeven standaardwaarde 5 .


TeeMap-elementen verwijderen

  • remove(key) - retourneert en verwijdert de invoer die is gekoppeld aan de opgegeven sleutel van een TreeMap
  • remove(key, value) - verwijdert het item alleen van de kaart als de opgegeven sleutel is gekoppeld aan de opgegeven waarde en retourneert een booleaanse waarde

Bijvoorbeeld,

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);

        // remove method with single parameter
        int value = numbers.remove("Two");
        System.out.println("Removed value: " + value);

        // remove method with two parameters
        boolean result = numbers.remove("Three", 3);
        System.out.println("Is the entry {Three=3} removed? " + result);

        System.out.println("Updated TreeMap: " + numbers);
    }
}

Uitvoer

TreeMap: {One=1, Three=3, Two=2}
Removed value = 2
Is the entry {Three=3} removed? True
Updated TreeMap: {One=1}

Vervang TreeMap-elementen

  • replace(key, value) - vervangt de waarde die is toegewezen door de opgegeven sleutel met de nieuwe waarde
  • replace(key, old, new) - vervangt de oude waarde alleen door de nieuwe waarde als de oude waarde al is gekoppeld aan de opgegeven sleutel
  • replaceAll(function) - vervangt elke waarde van de kaart door het resultaat van de gespecificeerde functie

Bijvoorbeeld,

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("Original TreeMap: " + numbers);

        // Using replace()
        numbers.replace("Second", 22);
        numbers.replace("Third", 3, 33);
        System.out.println("TreeMap using replace: " + numbers);

        // Using replaceAll()
        numbers.replaceAll((key, oldValue) -> oldValue + 2);
        System.out.println("TreeMap using replaceAll: " + numbers);
    }
}

Uitvoer

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

Let in het bovenstaande programma op de verklaring

numbers.replaceAll((key, oldValue) -> oldValue + 2);

Hier hebben we een lambda-expressie als argument doorgegeven.

De replaceAll() methode heeft toegang tot alle ingangen van de kaart. Het vervangt dan alle elementen met de nieuwe waarden (geretourneerd uit de lambda-expressie).


Sinds de TreeMap klasse implementeert NavigableMap , het biedt verschillende methoden om door de elementen van de treemap te navigeren.

1. Eerste en laatste methode

  • firstKey() - geeft de eerste sleutel van de kaart terug
  • firstEntry() - geeft de sleutel/waarde-toewijzing van de eerste sleutel van de kaart terug
  • lastKey() - geeft de laatste sleutel van de kaart terug
  • lastEntry() - geeft de sleutel/waarde-toewijzing van de laatste sleutel van de kaart terug

Bijvoorbeeld,

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);

        // Using the firstKey() method
        String firstKey = numbers.firstKey();
        System.out.println("First Key: " + firstKey);

        // Using the lastKey() method
        String lastKey = numbers.lastKey();
        System.out.println("Last Key: " + lastKey);

        // Using firstEntry() method
        System.out.println("First Entry: " + numbers.firstEntry());


        // Using the lastEntry() method
        System.out.println("Last Entry: " + numbers.lastEntry());
    }
}

Uitvoer

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

2. Plafond, vloer, hoger en lager methoden

  • higherKey() - Retourneert de laagste sleutel van de sleutels die groter zijn dan de opgegeven sleutel.
  • higherEntry() - Retourneert een invoer die is gekoppeld aan een sleutel die het laagst is van al die sleutels die groter is dan de opgegeven sleutel.
  • lowerKey() - Retourneert de grootste sleutel van al die sleutels die kleiner zijn dan de opgegeven sleutel.
  • lowerEntry() - Retourneert een invoer die is gekoppeld aan een sleutel die het grootst is van al die sleutels die kleiner zijn dan de opgegeven sleutel.
  • plafondKey() - Retourneert de laagste sleutel van de sleutels die groter zijn dan de opgegeven sleutel. Als de sleutel die als argument is doorgegeven aanwezig is op de kaart, wordt die sleutel geretourneerd.
  • plafondEntry() - Retourneert een item dat is gekoppeld aan een sleutel die het laagst is van de sleutels die groter zijn dan de opgegeven sleutel. Als een item dat is gekoppeld aan de sleutel die een argument heeft doorgegeven, aanwezig is op de kaart, wordt het item geretourneerd dat aan die sleutel is gekoppeld.
  • floorKey() - Retourneert de grootste sleutel onder de sleutels die kleiner zijn dan de opgegeven sleutel. Als de sleutel die als argument is doorgegeven aanwezig is, wordt die sleutel geretourneerd.
  • floorEntry() - Retourneert een item dat is gekoppeld aan een sleutel die het grootst is van de sleutels die kleiner zijn dan de opgegeven sleutel. Als de sleutel die als argument is doorgegeven aanwezig is, wordt die sleutel geretourneerd.

Bijvoorbeeld,

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);

        // Using higher()
        System.out.println("Using higherKey(): " + numbers.higherKey("Fourth"));
        System.out.println("Using higherEntry(): " + numbers.higherEntry("Fourth"));

        // Using lower()
        System.out.println("\nUsing lowerKey(): " + numbers.lowerKey("Fourth"));
        System.out.println("Using lowerEntry(): " + numbers.lowerEntry("Fourth"));

        // Using ceiling()
        System.out.println("\nUsing ceilingKey(): " + numbers.ceilingKey("Fourth"));
        System.out.println("Using ceilingEntry(): " + numbers.ceilingEntry("Fourth"));

        // Using floor()
        System.out.println("\nUsing floorKey(): " + numbers.floorKey("Fourth"));
        System.out.println("Using floorEntry(): " + numbers.floorEntry("Fourth"));


    }
}

Uitvoer

TreeMap: {First=1, Fourth=6, Second=5, Third=4}
Using higherKey(): Second
Using higherEntry(): Second=5

Using lowerKey(): First
Using lowerEntry(): First=1

Using ceilingKey(): Fourth
Using ceilingEntry(): Fourth=6

Using floorkey(): Fourth
Using floorEntry(): Fourth=6

3. pollFirstEntry() en pollLastEntry() Methoden

  • pollFirstEntry() - retourneert en verwijdert de invoer die is gekoppeld aan de eerste sleutel van de kaart
  • pollLastEntry() - retourneert en verwijdert de invoer die is gekoppeld aan de laatste sleutel van de kaart

Bijvoorbeeld,

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);

        //Using the pollFirstEntry() method
        System.out.println("Using pollFirstEntry(): " + numbers.pollFirstEntry());

        // Using the pollLastEntry() method
        System.out.println("Using pollLastEntry(): " + numbers.pollLastEntry());

        System.out.println("Updated TreeMap: " + numbers);

    }
}

Uitvoer

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

4. headMap(), tailMap() en subMap() Methoden

headMap(key, booleanValue)

De headMap() methode retourneert alle sleutel/waarde-paren van een treemap vóór de opgegeven sleutel (wat als argument wordt doorgegeven).

De booleanValue parameter is optioneel. De standaardwaarde is false .

Als true wordt doorgegeven als een booleanValue , bevat de methode ook het sleutel/waarde-paar van de key die als argument wordt doorgegeven.

Bijvoorbeeld,

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("\nUsing headMap() Method:");
        // Using headMap() with default booleanValue
        System.out.println("Without boolean value: " + numbers.headMap("Fourth"));

        // Using headMap() with specified booleanValue
        System.out.println("With boolean value: " + numbers.headMap("Fourth", true));

    }
}

Uitvoer

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

Using headMap() Method: 
Without boolean value: {First=1}
With boolean value: {First=1, Fourth=4}

tailMap(key, booleanValue)

De tailMap() methode retourneert alle sleutel/waarde-paren van een treemap vanaf de opgegeven sleutel (wat als argument wordt doorgegeven).

De booleanValue is een optionele parameter. De standaardwaarde is true .

Als false wordt doorgegeven als een booleanValue , de methode bevat niet het sleutel/waarde-paar van de opgegeven key .

Bijvoorbeeld,

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("\nUsing tailMap() Method:");
        // Using tailMap() with default booleanValue
        System.out.println("Without boolean value: " + numbers.tailMap("Second"));

        // Using tailMap() with specified booleanValue
        System.out.println("With boolean value: " + numbers.tailMap("Second", false));

    }
}

Uitvoer

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

Using tailMap() Method:
Without boolean value: {Second=2, Third=3}
With boolean value: {Third=3}

subMap(k1, bV1, k2, bV2)

De subMap() methode retourneert alle items die zijn gekoppeld aan sleutels tussen k1 en k2 inclusief de invoer van k1 .

De bV1 en bV2 zijn optionele booleaanse parameters. De standaardwaarde van bV1 is true en de standaardwaarde van bV2 is false .

Als false wordt doorgegeven als bV1 , retourneert de methode alle items die zijn gekoppeld aan sleutels tussen k1 en k2 zonder de invoer van k1 .

Als true wordt doorgegeven als bV2 , retourneert de methode alle items die zijn gekoppeld aan sleutels tussen k1 en k2 inclusief de invoer van k2 .

Bijvoorbeeld,

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("\nUsing subMap() Method:");
        // Using subMap() with default booleanValue
        System.out.println("Without boolean value: " + numbers.subMap("Fourth", "Third"));

        // Using subMap() with specified booleanValue
        System.out.println("With boolean value: " + numbers.subMap("Fourth", false, "Third", true));

    }
}

Uitvoer

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

Using subMap() Method:
Without boolean value: {Fourth=4, Second=2}
With boolean value: {Second=2, Third=3}

Andere methoden van TreeMap

Methode Beschrijving
clone() Maakt een kopie van de TreeMap
containsKey() Zoekt de TreeMap voor de opgegeven sleutel en geeft een booleaans resultaat
containsValue() Zoekt de TreeMap voor de opgegeven waarde en geeft een booleaans resultaat
size() Retourneert de grootte van de TreeMap
clear() Verwijdert alle vermeldingen van de TreeMap

Boomkaartvergelijker

In alle bovenstaande voorbeelden worden treemap-elementen op natuurlijke wijze gesorteerd (in oplopende volgorde). We kunnen echter ook de volgorde van sleutels aanpassen.

Hiervoor moeten we onze eigen comparatorklasse maken op basis van welke sleutels in een treemap zijn gesorteerd. Bijvoorbeeld,

import java.util.TreeMap;
import java.util.Comparator;

class Main {
    public static void main(String[] args) {

        // Creating a treemap with a customized comparator
        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);
    }

    // Creating a comparator class
    public static class CustomComparator implements Comparator<String> {

        @Override
        public int compare(String number1, String number2) {
            int value =  number1.compareTo(number2);

            // elements are sorted in reverse order
            if (value > 0) {
                return -1;
            }
            else if (value < 0) {
                return 1;
            }
            else {
                return 0;
            }
        }
    }
}

Uitvoer

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

In het bovenstaande voorbeeld hebben we een treemap gemaakt met CustomComparator class als argument.

De CustomComparator class implementeert de Comparator interface.

We overschrijven dan de compare() methode om elementen in omgekeerde volgorde te sorteren.

Ga voor meer informatie naar Java Comparator (officiële Java-documentatie).


Java

  1. Java-operators
  2. Java-opmerkingen
  3. Java voor elke lus
  4. Java-strings
  5. Java-interface
  6. Java anonieme klasse
  7. Java proberen-met-bronnen
  8. Java-annotaties
  9. Java-beweringen
  10. Java-algoritmen
  11. Willekeurige getallen genereren in Java