Interfaz NavigableMap en Java con ejemplo

La interfaz NavigableMap es miembro de Java Collection Framework . Pertenece al paquete java.util y es una extensión de SortedMap que proporciona métodos de navegación convenientes como lowerKey, FloorKey, CeilingKey y HigherKey, y junto con este popular método de navegación. También proporciona formas de crear un submapa a partir de un mapa existente en Java, por ejemplo, headMap cuyas claves son menores que la clave especificada, tailMap cuyas claves son mayores que la clave especificada y un submapa que contiene estrictamente claves que se encuentran entre toKey y fromKey. 
Una clase de ejemplo que implementa NavigableMap es TreeMap .

Declaración:

public interface NavigableMap<K,V> extends SortedMap<K,V>

Aquí, K es el tipo de objeto clave y V es el tipo de objeto de valor.

Jerarquía de NavigableMap

NavigableMap Interface in Java with Example

Implementa las interfaces Map<K,V> , SortedMap<K,V> . ConcurrentNavigableMap<K,V> extiende NavigableMap. ConcurrentSkipListMap y TreeMap implementan NavigableMap.

Ejemplo:

Java

// Java program to demonstrate
// the NavigableMap interface
import java.util.NavigableMap;
import java.util.TreeMap;
 
public class NavigableMapExample {
 
    public static void main(String[] args)
    {
        // Instantiate an object
        // Since NavigableMap
        // is an interface so we
        // use TreeMap
        NavigableMap<String, Integer> nm
            = new TreeMap<String, Integer>();
 
        // Add elements using put() method
        nm.put("C", 888);
        nm.put("Y", 999);
        nm.put("A", 444);
        nm.put("T", 555);
        nm.put("B", 666);
        nm.put("A", 555);
 
        // Print the contents on the console
        System.out.println("Mappings of NavigableMap : "
                           + nm);
 
        System.out.printf("Descending Set  : %s%n",
                          nm.descendingKeySet());
        System.out.printf("Floor Entry  : %s%n",
                          nm.floorEntry("L"));
        System.out.printf("First Entry  : %s%n",
                          nm.firstEntry());
        System.out.printf("Last Key : %s%n", nm.lastKey());
        System.out.printf("First Key : %s%n",
                          nm.firstKey());
        System.out.printf("Original Map : %s%n", nm);
        System.out.printf("Reverse Map : %s%n",
                          nm.descendingMap());
    }
}

 
Producción:

Mappings of NavigableMap : {A=555, B=666, C=888, T=555, Y=999}
Descending Set  : [Y, T, C, B, A]
Floor Entry  : C=888
First Entry  : A=555
Last Key : Y
First Key : A
Original Map : {A=555, B=666, C=888, T=555, Y=999}
Reverse Map : {Y=999, T=555, C=888, B=666, A=555}

Implementando Clases

NavigableMap tiene dos clases de implementación que son ConcurrentSkipListMap y TreeMap . TreeMap es una implementación de NavigableMap basada en un árbol rojo-negro y se ordena de acuerdo con el orden natural de sus claves, o mediante un comparador proporcionado en el momento de la creación del mapa, según el constructor que se utilice. TreeMap tiene el costo de tiempo esperado de log(n) para las operaciones de inserción, eliminación y acceso. TreeMap no está sincronizado y tiene que hacerse externamente.

Sintaxis:

NavigableMap<K, V> objectName = new TreeMap<K, V>();

Operaciones básicas en NavigableMap

1. Agregar elementos

Para agregar elementos a un NavigableMap podemos usar cualquier método de la interfaz del Mapa. El siguiente código muestra cómo usarlos. Puede observar en el código que la orden de inserción no se conserva. Cuando no se proporciona un Comparador en el momento de la construcción, se sigue el orden natural. 

Java

// Java program for adding elements
// to a NavigableMap
import java.util.*;
 
class AddingElementsExample {
    public static void main(String args[])
    {
 
        // Instantiate an object
        // Since NavigableMap is an interface
        // We use TreeMap
        NavigableMap<Integer, String> nmap
            = new TreeMap<Integer, String>();
 
        // Add elements using put()
        nmap.put(3, "Geeks");
        nmap.put(2, "For");
        nmap.put(1, "Geeks");
 
        // Print the contents on the console
        System.out.println("Mappings of NavigableMap : "
                           + nmap);
    }
}

 
Producción:

Mappings of NavigableMap : {1=Geeks, 2=For, 3=Geeks}

2. Eliminación de elementos

Para eliminar elementos también usamos métodos de la interfaz Map, ya que NavigableMap es un descendiente de Map. Podemos usar el método remove() que toma el valor de la clave y elimina la asignación de la clave de este diagrama de árbol si está presente en el mapa. Podemos usar clear() para eliminar todos los elementos del mapa.
 

Java

// Java Program for deleting
// elements from NavigableMap
import java.util.*;
 
class RemovingElementsExample {
   
    public static void main(String args[])
    {
        // Instantiate an object
        // Since NavigableMap
        // is an interface
        // We use TreeMap
        NavigableMap<Integer, String> nmap
            = new TreeMap<Integer, String>();
 
        // Add elements using put()
        nmap.put(3, "Geeks");
        nmap.put(2, "Geeks");
        nmap.put(1, "Geeks");
        nmap.put(4, "For");
 
        // Print the contents on the console
        System.out.println("Mappings of NavigableMap : "
                           + nmap);
 
        // Remove elements using remove()
        nmap.remove(4);
 
        // Print the contents on the console
        System.out.println(
            "\nNavigableMap, after remove operation : "
            + nmap);
 
        // Clear the entire map using clear()
        nmap.clear();
        System.out.println(
            "\nNavigableMap, after clear operation : "
            + nmap);
    }
}

 
Producción:

Mappings of NavigableMap : {1=Geeks, 2=Geeks, 3=Geeks, 4=For}

NavigableMap, after remove operation : {1=Geeks, 2=Geeks, 3=Geeks}

NavigableMap, after clear operation : {}

3. Accediendo a los Elementos

Podemos acceder a los elementos de un NavigableMap usando el método get(), el ejemplo de esto se da a continuación.

Java

// Java Program for accessing
// elements in a NavigableMap
 
import java.util.*;
 
public class AccessingElementsExample {
 
    public static void main(String[] args)
    {
        // Instantiate an object
        // Since NavigableMap is an interface
        // We use TreeMap
        NavigableMap<Integer, String> nmap
            = new TreeMap<Integer, String>();
 
        // Add elements using put()
        nmap.put(8, "Third");
        nmap.put(6, "Second");
        nmap.put(3, "First");
        nmap.put(11, "Fourth");
 
        // Accessing the elements using get()
        // with key as a parameter
        System.out.println(nmap.get(3));
        System.out.println(nmap.get(6));
        System.out.println(nmap.get(8));
        System.out.println(nmap.get(11));
 
        // Display the set of keys using keySet()
        System.out.println("\nThe NavigableMap key set: "
                           + nmap.keySet());
    }
}

 
Producción:

First
Second
Third
Fourth

The NavigableMap key set: [3, 6, 8, 11]

4. Atravesando

Podemos usar la interfaz Iterator para atravesar cualquier estructura del Framework de colección. Dado que los iteradores trabajan con un tipo de datos, usamos Entry< ? , ? > para resolver los dos tipos separados en un formato compatible. Luego, usando el método next() imprimimos los elementos del NavigableMap. Otra forma famosa es usar un ciclo for-each y obtener las claves. El valor de la clave se encuentra utilizando el método getValue().

Java

// Java Program for traversing
// a NavigableMap
import java.util.*;
 
class TraversalExample {
   
    public static void main(String args[])
    {
        // Instantiate an object
        // Since NavigableMap is an interface
        // We use TreeMap
        NavigableMap<Integer, String> nmap
            = new TreeMap<Integer, String>();
 
        // Add elements using put()
        nmap.put(3, "Geeks");
        nmap.put(2, "For");
        nmap.put(1, "Geeks");
 
        // Create an Iterator over the
        // NavigableMap
        Iterator<NavigableMap.Entry<Integer, String> > itr
            = nmap.entrySet().iterator();
 
        System.out.println("Traversing using Iterator: ");
        // The hasNext() method is used to check if there is
        // a next element The next() method is used to
        // retrieve the next element
        while (itr.hasNext()) {
            NavigableMap.Entry<Integer, String> entry
                = itr.next();
            System.out.println("Key = " + entry.getKey()
                               + ", Value = "
                               + entry.getValue());
        }
 
        System.out.println("Traversing using for-each: ");
        // Iterate using for-each loop
        for (Map.Entry mapElement : nmap.entrySet()) {
            // get the key using getKey()
            int key = (int)mapElement.getKey();
 
            // Finding the value
            String value = (String)mapElement.getValue();
 
            System.out.println("Key = " + key
                               + ", Value = " + value);
        }
    }
}

 
Producción:

Traversing using Iterator:  
Key = 1, Value = Geeks
Key = 2, Value = For
Key = 3, Value = Geeks
Traversing using for-each:  
Key = 1, Value = Geeks
Key = 2, Value = For
Key = 3, Value = Geeks

Nota: Cada vez que decimos ‘elementos de NavigableMap’, debe tenerse en cuenta que los elementos se almacenan en el objeto de una clase de implementación de NavigableMap, en este caso TreeMap.

Métodos de NavigableMap

NavigableMap hereda métodos de la interfaz Mapa , interfaz SortedMap . Las interfaces principales proporcionan los métodos básicos para agregar elementos, eliminar elementos y atravesarlos. Los métodos de NavigableMap se dan en la siguiente tabla. Aquí,

  • K – El tipo de claves en el mapa.
  • V – El tipo de valores mapeados en el mapa.

MÉTODO

DESCRIPCIÓN

entrada de techo (tecla K) Devuelve una asignación de clave-valor asociada con la clave mínima mayor o igual que la clave dada, o nulo si no existe tal clave.
tecla de techo (tecla K) Devuelve la clave mínima mayor o igual que la clave dada, o nula si no existe tal clave.
descendingKeySet() Devuelve una vista de NavigableSet en orden inverso de las claves contenidas en este mapa.
mapadescendente() Devuelve una vista en orden inverso de las asignaciones contenidas en este mapa.
Primera entrada() Devuelve una asignación de clave-valor asociada con la clave mínima en esta asignación, o nula si la asignación está vacía.
entrada de piso (tecla K) Devuelve una asignación de clave-valor asociada con la clave mayor menor o igual que la clave dada, o nula si no existe tal clave.
FloorKey (tecla K) Devuelve la clave mayor menor o igual que la clave dada, o nula si no existe tal clave.
headMap (K a clave) Devuelve una vista de la parte de este mapa cuyas claves son estrictamente menores que toKey.
headMap(K toKey, booleano inclusive) Devuelve una vista de la parte de este mapa cuyas claves son menores que (o iguales, si inclusive es verdadero) toKey.
entrada superior (tecla K) Devuelve un mapeo de clave-valor asociado con la clave mínima estrictamente mayor que la clave dada, o nulo si no existe tal clave.
tecla superior (tecla K) Devuelve la clave mínima estrictamente mayor que la clave dada, o nula si no existe tal clave.
última entrada() Devuelve una asignación de clave-valor asociada con la clave mayor en esta asignación, o nula si la asignación está vacía.
entrada inferior (tecla K) Devuelve un mapeo de clave-valor asociado con la clave mayor estrictamente menor que la clave dada, o nulo si no existe tal clave.
tecla inferior (tecla K) Devuelve la clave mayor estrictamente menor que la clave dada, o nula si no existe tal clave.
conjunto de claves navegables() Devuelve una vista NavigableSet de las claves contenidas en este mapa.
encuestaPrimeraEntrada() Elimina y devuelve un mapeo de clave-valor asociado con la clave mínima en este mapa, o nulo si el mapa está vacío.
encuestaÚltimaEntrada() Elimina y devuelve un mapeo de clave-valor asociado con la clave mayor en este mapa, o nulo si el mapa está vacío.

subMap(K fromKey, booleano 

fromInclusive, K toKey, boolean toInclusive)

Devuelve una vista de la parte de este mapa cuyas claves van desde fromKey hasta toKey.
submapa(K de clave, K a clave) Devuelve una vista de la parte de este mapa cuyas claves van desde fromKey, inclusive, hasta toKey, exclusiva.
tailMap(K fromKey) Devuelve una vista de la parte de este mapa cuyas claves son mayores o iguales que fromKey.
 tailMap(K fromKey, booleano inclusive) Devuelve una vista de la parte de este mapa cuyas claves son mayores que (o iguales, si inclusive es verdadero) fromKey.

Métodos heredados de la interfaz java.util.SortedMap

MÉTODO

DESCRIPCIÓN

comparador() Devuelve el comparador usado para ordenar las claves en este mapa, o nulo si este mapa usa el ordenamiento natural de sus claves.
conjuntoentrada() Devuelve una vista de conjunto de las asignaciones contenidas en este mapa.
primeraClave() Devuelve la primera clave (más baja) actualmente en este mapa.
juego de llaves() Devuelve una vista de conjunto de las claves contenidas en este mapa.
última clave() Devuelve la última clave (más alta) actualmente en este mapa.
valores() Devuelve una vista de colección de los valores contenidos en este mapa.

Métodos heredados de la interfaz java.util.Map

MÉTODO

DESCRIPCIÓN

clear() Elimina todas las asignaciones de este mapa (operación opcional).

computar (tecla K, BiFunction<? super K,? super 

V,? extiende V> función de reasignación)

Intenta calcular una asignación para la clave especificada y su valor asignado actual (o nulo si no hay una asignación actual).

computar si está ausente (tecla K, función <? super K,? 

extiende V> función de mapeo)

Si la clave especificada aún no está asociada con un valor (o está asignada a un valor nulo), intenta calcular su valor utilizando la función de asignación dada y lo ingresa en este mapa a menos que sea nulo.
ComputeIfPresent(tecla K, BiFunction<? super K,? super V,? extiende V> función de reasignación) Si el valor de la clave especificada está presente y no es nulo, intenta calcular una nueva asignación dada la clave y su valor asignado actual.
contiene clave (clave de objeto) Devuelve verdadero si este mapa contiene un mapeo para la clave especificada.
contieneValor(Valor del objeto) Devuelve verdadero si este mapa asigna una o más claves al valor especificado.
es igual a (Objeto o) Compara el objeto especificado con este mapa para la igualdad.
forEach(BiConsumidor<? super K,? super V> acción) Realiza la acción dada para cada entrada en este mapa hasta que todas las entradas hayan sido procesadas o la acción arroje una excepción.
obtener (clave de objeto) Devuelve el valor al que se asigna la clave especificada, o nulo si este mapa no contiene ninguna asignación para la clave.
getOrDefault (clave de objeto, V valor predeterminado) Devuelve el valor al que se asigna la clave especificada o defaultValue si este mapa no contiene ninguna asignación para la clave.
código hash() Devuelve el valor del código hash para este mapa.
esta vacio() Devuelve verdadero si este mapa no contiene asignaciones de clave-valor.
fusionar (tecla K, valor V, BiFunction<? super V,? super V,? extiende V> función de reasignación) Si la clave especificada aún no está asociada con un valor o está asociada con un valor nulo, la asocia con el valor no nulo proporcionado.
poner (tecla K, valor V) Asocia el valor especificado con la clave especificada en este mapa (operación opcional).
putAll(Map<? extiende K,? extiende V> m) Copia todas las asignaciones del mapa especificado a este mapa (operación opcional).
putIfAbsent (clave K, valor V) Si la clave especificada aún no está asociada con un valor (o está asignada a un valor nulo), la asocia con el valor dado y devuelve un valor nulo; de lo contrario, devuelve el valor actual.
eliminar (tecla de objeto) Elimina el mapeo de una clave de este mapa si está presente (operación opcional).
eliminar (clave de objeto, valor de objeto) Elimina la entrada de la clave especificada solo si actualmente está asignada al valor especificado.
reemplazar (tecla K, valor V) Reemplaza la entrada de la clave especificada solo si actualmente está asignada a algún valor.
reemplazar (tecla K, V valor anterior, V valor nuevo) Reemplaza la entrada de la clave especificada solo si actualmente está asignada al valor especificado.
replaceAll(BiFunction<? super K,? super V,? extiende la función V>) Reemplaza el valor de cada entrada con el resultado de invocar la función dada en esa entrada hasta que se hayan procesado todas las entradas o la función produzca una excepción.
Talla() Devuelve el número de asignaciones de clave-valor en esta asignación.

Referencia: https://docs.oracle.com/javase/8/docs/api/java/util/NavigableMap.html 
Este artículo es una contribución de Pratik Agarwal . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *