Uso de HashMap en Java
Aprende cómo utilizar mapas de datos con HashMap, sus ventajas, métodos clave y errores comunes.
¿Qué es un HashMap?
Un HashMap
es una estructura de datos que permite almacenar pares clave-valor. Es parte del paquete java.util
y permite acceder rápidamente a los valores a través de una clave única.
¿Cuándo usarlo?
- Cuando necesitas asociar datos (como nombres y edades).
- Cuando buscas eficiencia en la búsqueda (
O(1)
promedio). - Para contar repeticiones, agrupar por categoría, o crear índices.
Métodos principales
put(K clave, V valor)
: agrega o reemplaza un valor.get(K clave)
: obtiene el valor asociado.remove(K clave)
: elimina una entrada.containsKey(K clave)
: verifica si existe.keySet()
: obtiene todas las claves.values()
: obtiene todos los valores.
Ejemplo práctico
Veamos un ejemplo usando nombres y edades:
// Declaración de un HashMap
Map<String, Integer> edades = new HashMap<>();
// Agregar datos
edades.put("Ana", 25);
edades.put("Luis", 30);
// Obtener un valor
int edadAna = edades.get("Ana");
System.out.println("La edad de Ana es: " + edadAna);
// Verificar existencia
if (edades.containsKey("Luis")) {
System.out.println("Luis está en el mapa.");
}
// Eliminar un elemento
edades.remove("Luis");
// Iterar sobre un HashMap
for (Map.Entry<String, Integer> entrada : edades.entrySet()) {
System.out.println(entrada.getKey() + " tiene " + entrada.getValue() + " años.");
}
// Función que recibe un HashMap y calcula promedio de edades
public static double promedioEdades(Map<String, Integer> mapa) {
int suma = 0;
for (int edad : mapa.values()) {
suma += edad;
}
return mapa.isEmpty() ? 0 : (double) suma / mapa.size();
}
double promedio = promedioEdades(edades);
System.out.println("Promedio de edades: " + promedio);
Iterando sobre un HashMap
Puedes usar un for-each
con entrySet()
para recorrer clave y valor.
for (Map.Entry<String, Integer> entry : edades.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
Buenas prácticas
- Usa tipos no mutables como clave (
String
,Integer
). - Evita claves nulas (aunque
HashMap
permite una). - Valida la existencia con
containsKey()
antes de acceder conget()
. - No abuses de su tamaño: si necesitas orden, usa
LinkedHashMap
oTreeMap
.
Errores comunes
- Tratar de acceder a una clave inexistente y obtener
null
sin validación. - Modificar el mapa mientras lo recorres sin usar un iterador.
- Asumir que el orden de las claves es fijo (no lo es en
HashMap
).
Consejo importante
Si necesitas ordenar las claves, considera usar TreeMap
, y si necesitas conservar el orden de inserción, usa LinkedHashMap
.
Conclusión
HashMap
es una herramienta poderosa para manejar datos relacionados por clave. Cuando lo usas correctamente, mejora notablemente la eficiencia de tus programas.
En el siguiente capítulo exploraremos temas avanzados como manejo de excepciones o entrada/salida con archivos.