Volver a Java Básico
Introducción
HashMap es una estructura de datos que almacena pares clave-valor, permitiendo búsquedas, inserciones y eliminaciones rápidas. En este capítulo aprenderás cómo utilizar mapas de manera efectiva.
Operaciones Básicas de HashMap
// 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.");
}
Trabajar con Funciones
Puedes pasar HashMaps a funciones para procesarlos:
// 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);
Métodos Comunes de HashMap
put(clave, valor)- Agregar o actualizar una entradaget(clave)- Recuperar un valor por claveremove(clave)- Eliminar una entradacontainsKey(clave)- Verificar si existe la clavecontainsValue(valor)- Verificar si existe el valorkeySet()- Obtener todas las clavesvalues()- Obtener todos los valoresentrySet()- Obtener todos los pares clave-valorsize()- Obtener número de entradasisEmpty()- Verificar si está vacíoclear()- Eliminar todas las entradas
Buenas Prácticas
- Usa
containsKey()antes deget()para evitar valores null - Usa claves significativas (String, Integer, etc.)
- Inicializa con capacidad apropiada si conoces el tamaño
- Usa
getOrDefault()para proporcionar valores predeterminados - Considera usar
LinkedHashMapsi necesitas orden de inserción - Considera usar
TreeMapsi necesitas claves ordenadas
Malas Prácticas Comunes
- No verificar si existe una clave antes de acceder
- Usar objetos mutables como claves
- No manejar valores null apropiadamente
- Modificar claves después de la inserción
- Usar HashMap cuando un array simple sería suficiente
Ejemplos Prácticos
Contar frecuencia de palabras:
String[] palabras = {"manzana", "banana", "manzana", "cereza", "banana", "manzana"};
Map<String, Integer> conteo = new HashMap<>();
for (String palabra : palabras) {
conteo.put(palabra, conteo.getOrDefault(palabra, 0) + 1);
}
System.out.println(conteo); // {manzana=3, banana=2, cereza=1}
Almacenar puntajes de jugadores:
Map<String, Integer> puntajes = new HashMap<>();
puntajes.put("Jugador1", 100);
puntajes.put("Jugador2", 85);
puntajes.put("Jugador3", 95);
// Encontrar mayor puntaje
int maxPuntaje = 0;
String mejorJugador = "";
for (Map.Entry<String, Integer> entrada : puntajes.entrySet()) {
if (entrada.getValue() > maxPuntaje) {
maxPuntaje = entrada.getValue();
mejorJugador = entrada.getKey();
}
}
System.out.println("Mejor jugador: " + mejorJugador + " con puntaje: " + maxPuntaje);
Sistema de caché:
Map<String, String> cache = new HashMap<>();
public String obtenerDatos(String clave) {
if (cache.containsKey(clave)) {
return cache.get(clave);
}
String datos = obtenerDeBaseDatos(clave);
cache.put(clave, datos);
return datos;
}
Conclusión
HashMap es una estructura de datos poderosa y versátil para gestionar relaciones clave-valor. Comprender cómo usarlo efectivamente te ayudará a escribir código más eficiente para almacenamiento y recuperación de datos.
¡Esto completa el curso básico de Java. Continúa practicando estos conceptos para dominar la programación en Java!