Dominando Java NavigableMap: Características, Métodos e Implementación con TreeMap
Interfaz NavigableMap de Java
Este tutorial explica la interfaz NavigableMap de Java, sus métodos principales y cómo usarla con TreeMap.
La interfaz NavigableMap del framework de colecciones de Java proporciona capacidades de navegación a través de entradas de mapa. Es un SortedMap especializado, extendiendo su funcionalidad con métodos que permiten recorrido bidireccional eficiente.
Clase que Implementa NavigableMap
Como NavigableMap es una interfaz, no puedes instanciarla directamente. La implementación principal es la clase TreeMap, que ofrece una estructura de árbol de búsqueda binario auto-balanceado que mantiene las claves en orden ordenado.

Cómo Usar NavigableMap
Primero, importa la interfaz:
import java.util.NavigableMap;
import java.util.TreeMap;
Luego crea una instancia:
// Implementación NavigableMap por clase TreeMap
NavigableMap<Clave, Valor> numeros = new TreeMap<>();
En el código anterior, numeros es un TreeMap que almacena pares clave-valor. Clave es el identificador único, y Valor son los datos asociados.
Métodos Principales de NavigableMap
Todas las operaciones de SortedMap están disponibles, pero varias se sobrescriben para proporcionar control más preciso. Métodos clave incluyen:
headMap(clave, booleanoInclusivo)
Devuelve una vista de la porción del mapa cuyas claves son estrictamente menores que clave cuando booleanoInclusivo es false (por defecto). Si booleanoInclusivo es true, el mapa devuelto incluye la entrada para clave.
tailMap(clave, booleanoInclusivo)
Devuelve una vista de la porción del mapa cuyas claves son mayores o iguales a clave cuando booleanoInclusivo es true (por defecto). Pasar false excluye la entrada de clave.
subMap(desdeClave, desdeInclusivo, hastaClave, hastaInclusivo)
Proporciona una vista entre desdeClave y hastaClave. Los valores por defecto son desdeInclusivo = true y hastaInclusivo = false. Ajustar estas banderas controla si las claves frontera son parte del mapa resultante.
Métodos Adicionales de Navegación
- descendingMap() – invierte el orden de entradas.
- descendingKeySet() – vista de claves invertida.
- ceilingEntry(clave) – entrada más baja con clave >= clave dada.
- ceilingKey(clave) – clave más baja >= clave dada.
- floorEntry(clave) – entrada más alta con clave <= clave dada.
- floorKey(clave) – clave más alta <= clave dada.
- higherEntry(clave) – entrada más baja con clave > clave dada.
- higherKey(clave) – clave más baja > clave dada.
- lowerEntry(clave) – entrada más alta con clave < clave dada.
- lowerKey(clave) – clave más alta < clave dada.
- firstEntry() – entrada con la clave más pequeña.
- lastEntry() – entrada con la clave más grande.
- pollFirstEntry() – recupera y elimina la primera entrada.
- pollLastEntry() – recupera y elimina la última entrada.
Para la especificación oficial, consulta la documentación de Java NavigableMap.
Ejemplo de Implementación con TreeMap
import java.util.NavigableMap;
import java.util.TreeMap;
class Main {
public static void main(String[] args) {
// Creando NavigableMap usando TreeMap
NavigableMap<String, Integer> numeros = new TreeMap<>();
// Insertar elementos en el mapa
numeros.put("Dos", 2);
numeros.put("Uno", 1);
numeros.put("Tres", 3);
System.out.println("NavigableMap: " + numeros);
// Acceder a la primera entrada del mapa
System.out.println("Primera Entrada: " + numeros.firstEntry());
// Acceder a la última entrada del mapa
System.out.println("Última Entrada: " + numeros.lastEntry());
// Eliminar la primera entrada del mapa
System.out.println("Primera Entrada Eliminada: " + numeros.pollFirstEntry());
// Eliminar la última entrada del mapa
System.out.println("Última Entrada Eliminada: " + numeros.pollLastEntry());
}
}
Salida
NavigableMap: {Uno=1, Tres=3, Dos=2} Primera Entrada: Uno=1 Última Entrada: Dos=2 Primera Entrada Eliminada: Uno=1 Última Entrada Eliminada: Dos=2
Aprende más sobre TreeMap en la documentación de Java TreeMap.
Con un sólido entendimiento de la interfaz NavigableMap y su implementación TreeMap, puedes construir estructuras de datos ordenadas eficientes para tus aplicaciones Java.
Java
- Dominando el Logging en Java: Mejores Prácticas Esenciales para Código Fiable
- Dominando las Interfaces en C#: Definición, Implementación y Casos de Uso Prácticos
- Dominar Operadores en Java: Tipos, Sintaxis y Ejemplos Prácticos
- Dominando la palabra clave super en Java: Uso avanzado y ejemplos prácticos
- Dominando interfaces en Java: Conceptos, implementación y mejores prácticas
- Dominando Try‑with‑Resources en Java: Gestión automática de recursos explicada
- Dominando la Interfaz NavigableSet de Java: Navegación, Ordenación y Ejemplos Prácticos
- Dominando Expresiones Lambda en Java: Desde Básicos hasta Stream API
- Interfaz vs Clase Abstracta en Java: Cómo elegir la abstracción correcta
- Entendiendo las Interfaces en Java: Definiciones, Usos y Buenas Prácticas
- Java 9 Métodos Privados en Interfaces: Mejorar Encapsulamiento y Reutilización de Código