TreeMap: pares ordenados de clave y valor
Use TreeMap para mantener el orden y desplazarse mediante firstKey, lastKey, floorKey y ceilingKey.
TreeMap: pares ordenados de clave y valor es una lección gratuita de Java Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Java Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Java Academy incluye 4 lecciones en total.
¿Qué es TreeMap?
TreeMap es una implementación de mapa ordenado respaldada por un árbol rojo-negro. Las claves se mantienen en orden natural ascendente (o según el orden de un comparador personalizado). Todas las operaciones básicas tienen un coste O(log n).
import java.util.TreeMap;
TreeMap<String, Integer> scores = new TreeMap<>();
scores.put("Charlie", 85);
scores.put("Alice", 92);
scores.put("Bob", 78);
// Iteration is in key order: Alice, Bob, Charlie
for (var entry : scores.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}firstKey, lastKey, floorKey, ceilingKey
La interfaz NavigableMap de TreeMap expone métodos de navegación para encontrar claves relativas a un valor determinado:
TreeMap<Integer, String> map = new TreeMap<>();
map.put(10, "ten"); map.put(20, "twenty"); map.put(30, "thirty"); map.put(40, "forty");
System.out.println(map.firstKey()); // 10
System.out.println(map.lastKey()); // 40
System.out.println(map.floorKey(25)); // 20 (largest key ≤ 25)
System.out.println(map.ceilingKey(25)); // 30 (smallest key ≥ 25)
System.out.println(map.lowerKey(20)); // 10 (strictly less)
System.out.println(map.higherKey(20)); // 30 (strictly greater)Navegación por las entradas
floorEntry, ceilingEntry, firstEntry y lastEntry devuelven la Map.Entry completa en lugar de devolver solo la clave:
TreeMap<Integer, String> prices = new TreeMap<>();
prices.put(100, "Budget"); prices.put(300, "Standard"); prices.put(700, "Premium");
var entry = prices.floorEntry(350);
System.out.println(entry.getKey() + ": " + entry.getValue()); // 300: Standard
var top = prices.lastEntry();
System.out.println(top.getValue()); // PremiumsubMap, headMap, tailMap
Extraiga vistas de rangos de un TreeMap. Estas vistas están respaldadas por el mapa original: los cambios realizados en una se reflejan en el otro.
TreeMap<Integer, String> map = new TreeMap<>();
for (int i = 1; i <= 10; i++) map.put(i, "v"+i);
// Keys from 3 (inclusive) to 7 (exclusive)
System.out.println(map.subMap(3, 7)); // {3=v3, 4=v4, 5=v5, 6=v6}
// Keys strictly less than 5
System.out.println(map.headMap(5)); // {1=v1, 2=v2, 3=v3, 4=v4}
// Keys >= 7
System.out.println(map.tailMap(7)); // {7=v7, 8=v8, 9=v9, 10=v10}Límites inclusivos y exclusivos
Utilice las variantes sobrecargadas para controlar con precisión los límites:
TreeMap<Integer, String> map = new TreeMap<>();
for (int i = 1; i <= 10; i++) map.put(i*10, "v"+i);
// From 30 (inclusive) to 60 (inclusive)
System.out.println(map.subMap(30, true, 60, true));
// {30=v3, 40=v4, 50=v5, 60=v6}Orden descendente
Utilice descendingMap() o descendingKeySet() para iterar sobre las claves en orden inverso:
TreeMap<String, Integer> tm = new TreeMap<>();
tm.put("A", 1); tm.put("C", 3); tm.put("B", 2);
for (String key : tm.descendingKeySet()) {
System.out.print(key + " "); // C B A
}pollFirstEntry y pollLastEntry
Elimine y devuelva atómicamente la primera o la última entrada; resulta útil para crear mapas de prioridades:
TreeMap<Integer, String> events = new TreeMap<>();
events.put(8, "Breakfast");
events.put(12, "Lunch");
events.put(18, "Dinner");
var first = events.pollFirstEntry(); // removes 8=Breakfast
System.out.println(first.getValue() + " removed");
System.out.println(events.firstKey()); // 12Caso de uso: tabla de clasificación
Una tabla de clasificación necesita ordenar a los jugadores por puntuación. TreeMap ordena las claves automáticamente:
TreeMap<Integer, String> leaderboard = new TreeMap<>(Comparator.reverseOrder());
leaderboard.put(1200, "Alice");
leaderboard.put(1500, "Bob");
leaderboard.put(900, "Carol");
int rank = 1;
for (var e : leaderboard.entrySet()) {
System.out.println(rank++ + ". " + e.getValue() + " (" + e.getKey() + ")");
}
// 1. Bob (1500)
// 2. Alice (1200)
// 3. Carol (900)Caso de uso: planificador de eventos
Asigne marcas de tiempo a eventos y utilice ceilingEntry para encontrar el siguiente evento programado después de un momento determinado:
import java.time.LocalTime;
TreeMap<LocalTime, String> schedule = new TreeMap<>();
schedule.put(LocalTime.of(9,0), "Standup");
schedule.put(LocalTime.of(14,0), "Review");
schedule.put(LocalTime.of(17,0), "Retro");
LocalTime now = LocalTime.of(11, 30);
var next = schedule.ceilingEntry(now);
System.out.println("Next: " + next.getValue()); // ReviewRendimiento de TreeMap frente a HashMap
Comparación clave:
- HashMap: get/put O(1) en promedio; sin orden
- TreeMap: get/put O(log n); ordenado por clave
- LinkedHashMap: O(1) en promedio; ordenado por inserción
Utilice TreeMap cuando necesite claves ordenadas o consultas por rangos. HashMap es más rápido para búsquedas simples por clave.
Seguridad de subprocesos
TreeMap NO es seguro para subprocesos. Para el acceso concurrente, utilice ConcurrentSkipListMap, que también mantiene el orden y ofrece operaciones O(log n), además de admitir lecturas y escrituras simultáneas.
Comprobación rápida
Dispone de un TreeMap<Integer, String> con las claves {10, 20, 30, 40}. ¿Qué devuelve map.floorKey(25)?
Repaso: TreeMap
Aspectos clave:
- TreeMap mantiene las claves ordenadas (en orden ascendente) mediante un árbol rojo-negro
- Todas las operaciones tienen un coste O(log n)
- Navegación: firstKey, lastKey, floorKey, ceilingKey, lowerKey, higherKey
- Vistas de rangos: subMap, headMap, tailMap (vistas respaldadas)
- Utilice ConcurrentSkipListMap para mapas ordenados seguros para subprocesos
Preguntas frecuentes
¿La lección «TreeMap: pares ordenados de clave y valor» es gratis?
Sí — el texto completo de «TreeMap: pares ordenados de clave y valor» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Java Academy, actualiza a CoddyKit PRO. El curso de Java Academy incluye 4 lecciones en total.
¿Qué aprenderé en «TreeMap: pares ordenados de clave y valor»?
Use TreeMap para mantener el orden y desplazarse mediante firstKey, lastKey, floorKey y ceilingKey. Practicas Java Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Java Academy?
No se requiere experiencia previa. Java Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «TreeMap: pares ordenados de clave y valor»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Java Academy?
Sí. Cada lección de Java Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- TreeMap: pares ordenados de clave y valor
- Submapas y vistas de rangos
- TreeSet y NavigableSet
- Orden personalizado en colecciones de árbol