La clase TreeMap es como HashMap . TreeMap almacena pares clave-valor. La principal diferencia es que TreeMap ordena la clave en orden ascendente. TreeMap se clasifica según el orden de sus claves, o por un comparador proporcionado en el momento de la creación del mapa, según el constructor que se utilice.
Requisito previo:
Repasemos los requisitos previos que incluyen principalmente constructores disponibles en el caso de TreeMap antes de seguir discutiendo
- TreeMap() Este constructor predeterminado construye un TreeMap vacío
- TreeMap(Mapa mapa) Crea un TreeMap con las entradas de un mapa.
- TreeMap(Comparator compare) Este es un constructor de argumentos y toma el objeto Comparator para construir un mapa vacío basado en un árbol. Se ordenará utilizando Comparator compare.
- TreeMap(SortedMap sortedMap) Se puede inicializar como TreeMap con las entradas de sortedMap .
Ilustración:
Input : a = ["Alice", 1], b = ["Bob", 2] Output : TreeMap = {"Alice" = 1, "Bob" = 2} Input : a = [1, "First"], b = [2, "Second"], c = [3, "Third"] Output : TreeMap = {1 = "First", 2 = "Second", 3 = "Third"}
Concepto: árboles rojos y negros
Un árbol rojo-negro es un árbol de búsqueda binario autoequilibrado en el que cada Node tiene un bit adicional, y ese bit a menudo se interpreta como el color (rojo o negro). Estos colores se utilizan para garantizar que el árbol permanezca equilibrado durante las inserciones y eliminaciones. Aunque el equilibrio del árbol no es perfecto, es lo suficientemente bueno para reducir el tiempo de búsqueda y mantenerlo alrededor del tiempo O(log n), donde n es el número total de elementos en el árbol. Debe tenerse en cuenta que como cada Node requiere solo 1 bit de espacio para almacenar la información de color, estos tipos de árboles muestran una huella de memoria idéntica al árbol de búsqueda binario clásico (sin color).
- Como sugiere el nombre del algoritmo, el color de cada Node en el árbol es negro o rojo.
- El Node raíz debe ser de color negro.
- El Node rojo no puede tener un Node vecino de color rojo.
- Todas las rutas desde el Node raíz hasta el nulo deben constar del mismo número de Nodes negros.
Las características anteriores conducen a que un Node posea ciertas propiedades que resultan de la siguiente manera:
- Los elementos de la izquierda siempre son menores que el elemento principal.
- El orden natural se calcula en la comparación lógica de los objetos.
- Los elementos correctos siempre son mayores o iguales que el elemento principal.
Sintaxis: declarar un objeto de TreeMap o simplemente crear un TreeMap
Map<Key, Integer> treemap = new TreeMap<>();
Acercarse:
- Crear un mapa de árbol.
- Cree algunas entradas para entrar en el TreeMap.
- Calcule el código hash de la clave {“key1”}. Se generará como 118.
- Imprima el TreeMap usando for loop traversal.
Implementación: implementación de árboles rojo-negro para mostrar el funcionamiento interno de TreeMap
Ejemplo
Java
// Java Program to show Internal Working // of TreeMap in Java // Importing Map and TreeMap classes // from java.util package import java.util.Map; import java.util.TreeMap; // Standard Comparable public class Key implements Comparable<Key> { // Custom input final int data = 118; private String key; // Constructor of this class public Key(String key) { // Super keyword refers immediate parent class // object super(); // This keyword is a reference variable // referring to current object this.key = key; } // Print Key method public String printKey() { return this.key; } // Override compareTo method @Override public int compareTo(Key obj) { return key.compareTo(obj.key); } } // Main Class class GFG { // Main driver method public static void main(String[] args) { // Initialize TreeMap // Declaring object of String type Map<Key, String> treemap = new TreeMap<>(); // Adding the elements in object of TreeMap // Custom inputs treemap.put(new Key("Key1"), "Alice"); treemap.put(new Key("Key4"), "Zeya"); treemap.put(new Key("Key3"), "Geek"); treemap.put(new Key("Key2"), "Bob"); // Iterate over object elements using for-each loop for (Map.Entry<Key, String> entry : treemap.entrySet()) // Print elements in TreeMap object System.out.println( "[" + entry.getKey().printKey() + " = " + entry.getValue() + "]"); } }
Java
// Java Program to show Internal Working // of TreeMap in Java // Importing Map and TreeMap classes // from java.util package import java.util.Map; import java.util.TreeMap; // Standard Comparable public class Key implements Comparable<Key> { // Custom input final int data = 118; private String key; // Constructor of this class public Key(String key) { // Super keyword refers immediate parent class // object super(); // This keyword is a reference variable // referring to current object this.key = key; } // Print Key method public String printKey() { return this.key; } // Override compareTo method @Override public int compareTo(Key obj) { return key.compareTo(obj.key); } } // Main Class class GFG { // Main driver method public static void main(String[] args) { // Initialize TreeMap // Declaring object of String type Map<Key, String> treemap = new TreeMap<>(); // Adding the elements in object of TreeMap // Custom inputs treemap.put(new Key("Key1"), "Alice"); treemap.put(new Key("Key4"), "Zeya"); treemap.put(new Key("Key3"), "Geek"); treemap.put(new Key("Key2"), "Bob"); // Iterate over object elements using for-each loop for (Map.Entry<Key, String> entry : treemap.entrySet()) // Print elements in TreeMap object System.out.println( "[" + entry.getKey().printKey() + " = " + entry.getValue() + "]"); } }
La explicación de salida se representa pictóricamente para obtener el funcionamiento interno de los Nodes de TreeMap, cómo se genera la salida anterior para una mejor comprensión.
Nota:
- El rendimiento de TreeMap es lento en comparación con HashMap y LinkedHashMap.
- La implementación del árbol proporciona un costo de tiempo de registro (n) garantizado para las operaciones containsKey() , get(), put() y remove().
Publicación traducida automáticamente
Artículo escrito por mayur_patil y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA