¿Qué es java.util.Map y para qué sirve en Java?

| Última modificación: 27 de diciembre de 2024 | Tiempo de Lectura: 3 minutos

Para nadie es un secreto que, lograr asociar identificadores únicos con valores específicos para gestionar configuraciones y datos clave, es un verdadero desafío. En especial si no se cuenta con la herramienta adecuada para trabajar con pares clave-valor. Por eso, desde que aprendí a manejar java.util.Map mi forma de manejar datos en Java cambió drásticamente. Quiero contarte qué es y para qué puede servirte.

java.util.Map en Java qué es

¿Qué es java.util.Map?

java.util.Map es una interfaz en Java con la que puedes almacenar datos en forma de pares clave-valor. El truco está en entender que cada clave es única, mientras que los valores asociados pueden repetirse.

Además, no olvides que Map no forma parte de la jerarquía de la interfaz Collection, por lo que tiene comportamientos únicos.

Entenderlo es muy fácil, es como tener una libreta de contactos donde cada página tiene el nombre de una persona con su respectivo número de teléfono. Entonces, cada nombre es único, y siempre sabes dónde encontrar la información de contacto de cada persona.

Características

  • Claves únicas: Recuerda que no permite claves duplicadas.
  • Valores duplicados: Permite que diferentes claves apunten al mismo valor.
  • Soporte para null: Implementaciones como HashMap y LinkedHashMap permiten una clave null y múltiples valores null.
  • Orden opcional: Dependiendo de la implementación, puedes mantener el orden de inserción (LinkedHashMap) o almacenar los datos ordenados por clave (TreeMap).

¿Cómo crear un Map en Java?

Dado que Map es una interfaz, no puedes instanciarla directamente. ¿Qué tienes que hacer entonces?, debes usar alguna de sus implementaciones, como HashMap, LinkedHashMap o TreeMap.

Crea un HashMap

import java.util.*;

public class EjemploMap {
public static void main(String[] args) {
Map<String, Integer> edades = new HashMap<>();

// Agregar elementos al Map
edades.put("Carlos", 30);
edades.put("Ana", 25);
edades.put("Luis", 35);

// Mostrar el contenido del Map
System.out.println("Edades: " + edades);
}
}

Mira el resultado:

Edades: {Carlos=30, Ana=25, Luis=35}

Estas son las operaciones comunes con java.util.Map

Añadir y actualizar valores

Puedes usar el método put() para añadir un nuevo par clave-valor o actualizar un valor existente:

edades.put("Ana", 26); // Actualiza la edad de Ana
System.out.println("Edades actualizadas: " + edades);

Observa el resultado:

Edades actualizadas: {Carlos=30, Ana=26, Luis=35}

Obtener valores

Te aconsejo usar el método get() para acceder al valor asociado a una clave específica:

int edadCarlos = edades.get("Carlos");
System.out.println("Edad de Carlos: " + edadCarlos);

Este es el resultado:

Edad de Carlos: 30

Ten en cuenta que, si la clave no existe, get() devolverá null.

Elimina elementos

De esta forma puedes eliminar un par clave-valor con el método remove():

edades.remove("Luis");
System.out.println("Edades después de eliminar: " + edades);

Así te queda el resultado:

Edades después de eliminar: {Carlos=30, Ana=26}

Verifica claves o valores

Mira cómo puedes comprobar si una clave o valor está presente con los métodos containsKey() y containsValue():

boolean existeAna = edades.containsKey("Ana");
boolean existeEdad40 = edades.containsValue(40);

System.out.println("¿Ana está en el Map? " + existeAna);
System.out.println("¿Existe alguna edad igual a 40? " + existeEdad40);

Mira el resultado:

¿Ana está en el Map? true
¿Existe alguna edad igual a 40? false

Iterar sobre un Map

Te muestro cómo recorrer las claves y valores con un bucle for-each:

for (Map.Entry<String, Integer> entrada : edades.entrySet()) {
System.out.println(entrada.getKey() + " tiene " + entrada.getValue() + " años.");
}

Este es el resultado:

Carlos tiene 30 años.
Ana tiene 26 años.

Implementaciones de java.util.Map

Quiero explicarte cada una de las implementaciones de java.util.Map, con sus características particulares:

HashMap

  • Orden: No garantiza el orden de los elementos.
  • Uso recomendado: Cuando la velocidad es más importante que el orden.
Map<String, String> colores = new HashMap<>();
colores.put("rojo", "#FF0000");
colores.put("azul", "#0000FF");
System.out.println(colores);

Mira el resultado:

{rojo=#FF0000, azul=#0000FF}

LinkedHashMap

  • Orden: Mantiene el orden de inserción.
  • Uso recomendado: Cuando necesitas un Map rápido que también conserve el orden.
Map<Integer, String> dias = new LinkedHashMap<>();
dias.put(1, "Lunes");
dias.put(2, "Martes");
System.out.println(dias);

El resultado:

{1=Lunes, 2=Martes}

TreeMap

  • Orden: Ordena los elementos según las claves de forma natural o con un comparador personalizado.
  • Uso recomendado: Cuando necesitas un Map ordenado.
Map<String, Integer> productos = new TreeMap<>();
productos.put("Zanahoria", 2);
productos.put("Apio", 1);
System.out.println(productos);

Resultado:

{Apio=1, Zanahoria=2}

¿Cuándo puedes usar java.util.Map?

java.util.Map es muy bueno cuando necesitas asociar claves únicas con valores, como:

  • Un diccionario de términos y definiciones.
  • Un mapa de códigos postales y sus ciudades correspondientes.
  • La relación entre nombres de usuarios y sus correos electrónicos.

Ya sabes que java.util.Map te sirve para manejar datos en pares clave-valor fácilmente. Solo tienes que usar cualquiera de sus implementaciones, la que mejor se adapte a tus necesidades, ya sea priorizando el rendimiento, el orden o ambas cosas.

Si dominar esta interfaz te parece interesante, imagina lo que podrías lograr aprendiendo todo el ecosistema de Java. Únete al Bootcamp de Java Full Stack de KeepCoding y aprende desde estructuras de datos hasta desarrollo avanzado de aplicaciones. Conviértete en un profesional IT en poco tiempo. ¡Te esperamos para empezar tu transformación!

Posts más leídos