Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Java

Mapa de árbol de Java

Mapa de árbol de Java

En este tutorial, aprenderemos sobre la clase Java TreeMap y sus operaciones con la ayuda de ejemplos.

El TreeMap La clase del marco de colecciones de Java proporciona la implementación de la estructura de datos de árbol.

Implementa la interfaz NavigableMap.


Creación de un mapa de árbol

Para crear un TreeMap , debemos importar el java.util.TreeMap paquete primero. Una vez que importamos el paquete, así es como podemos crear un TreeMap en Java.

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

En el código anterior, hemos creado un TreeMap números con nombre sin ningún argumento. En este caso, los elementos en TreeMap se ordenan naturalmente (orden ascendente).

Sin embargo, podemos personalizar la clasificación de los elementos usando el Comparator interfaz. Aprenderemos sobre esto más adelante en este tutorial.

Aquí,


Métodos de TreeMap

El TreeMap class proporciona varios métodos que nos permiten realizar operaciones en el mapa.


Insertar elementos en TreeMap

Por ejemplo,

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

Salida

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

Acceder a elementos de TreeMap

1. Uso de entrySet(), keySet() y valores()

Por ejemplo,

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

Salida

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. Usando get() y getOrDefault()

Por ejemplo,

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

Salida

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

Aquí, el getOrDefault() método no encuentra la clave Cinco . Por lo tanto, devuelve el valor predeterminado especificado 5 .


Eliminar elementos de TeeMap

Por ejemplo,

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

Salida

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

Reemplazar elementos de TreeMap

Por ejemplo,

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

Salida

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}

En el programa anterior, observe la declaración

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

Aquí, hemos pasado una expresión lambda como argumento.

El replaceAll() El método accede a todas las entradas del mapa. Luego reemplaza todos los elementos con los nuevos valores (devueltos de la expresión lambda).


Desde el TreeMap clase implementa NavigableMap , proporciona varios métodos para navegar por los elementos del diagrama de árbol.

1. Primer y último método

Por ejemplo,

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

Salida

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

2. Métodos de Techo, Piso, Superior e Inferior

Por ejemplo,

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


    }
}

Salida

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. Métodos pollFirstEntry() y pollLastEntry()

Por ejemplo,

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

    }
}

Salida

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

4. Métodos headMap(), tailMap() y subMap()

headMap(clave, valor booleano)

El headMap() El método devuelve todos los pares clave/valor de un mapa de árbol antes de la clave especificada (que se pasa como argumento).

El valor booleano el parámetro es opcional. Su valor por defecto es false .

Si true se pasa como un booleanValue , el método también incluye el par clave/valor del key que se pasa como argumento.

Por ejemplo,

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

    }
}

Salida

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(clave, valor booleano)

El tailMap() El método devuelve todos los pares clave/valor de un mapa de árbol a partir de la clave especificada (que se pasa como argumento).

El valor booleano es un parámetro opcional. Su valor por defecto es true .

Si false se pasa como un booleanValue , el método no incluye el par clave/valor del key especificado .

Por ejemplo,

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

    }
}

Salida

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

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

submapa(k1, bV1, k2, bV2)

El subMap() método devuelve todas las entradas asociadas con claves entre k1 y k2 incluyendo la entrada de k1 .

El bV1 y bV2 son parámetros booleanos opcionales. El valor predeterminado de bV1 es true y el valor predeterminado de bV2 es false .

Si false se pasa como bV1 , el método devuelve todas las entradas asociadas con claves entre k1 y k2 sin incluir la entrada de k1 .

Si true se pasa como bV2 , el método devuelve todas las entradas asociadas con claves entre k1 y k2 incluyendo la entrada de k2 .

Por ejemplo,

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

    }
}

Salida

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}

Otros métodos de TreeMap

Método Descripción
clone() Crea una copia del TreeMap
containsKey() Busca el TreeMap para la clave especificada y devuelve un resultado booleano
containsValue() Busca el TreeMap para el valor especificado y devuelve un resultado booleano
size() Devuelve el tamaño del TreeMap
clear() Elimina todas las entradas del TreeMap

Comparador de TreeMap

En todos los ejemplos anteriores, los elementos del mapa de árbol se ordenan de forma natural (en orden ascendente). Sin embargo, también podemos personalizar el orden de las teclas.

Para esto, necesitamos crear nuestra propia clase de comparación en función de qué claves se ordenan en un mapa de árbol. Por ejemplo,

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

Salida

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

En el ejemplo anterior, hemos creado un mapa de árbol pasando CustomComparator class como argumento.

El Comparador Personalizado clase implementa el Comparator interfaz.

Luego anulamos el compare() método para ordenar elementos en orden inverso.

Para obtener más información, visite Java Comparator (documentación oficial de Java).


Java

  1. Operadores Java
  2. Comentarios Java
  3. Java para cada bucle
  4. Cadenas Java
  5. Interfaz Java
  6. Clase anónima de Java
  7. Prueba de Java con recursos
  8. Anotaciones Java
  9. Aserciones de Java
  10. Algoritmos de Java
  11. Cómo generar números aleatorios en Java