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 entrada
  • get(clave) - Recuperar un valor por clave
  • remove(clave) - Eliminar una entrada
  • containsKey(clave) - Verificar si existe la clave
  • containsValue(valor) - Verificar si existe el valor
  • keySet() - Obtener todas las claves
  • values() - Obtener todos los valores
  • entrySet() - Obtener todos los pares clave-valor
  • size() - Obtener número de entradas
  • isEmpty() - Verificar si está vacío
  • clear() - Eliminar todas las entradas

Buenas Prácticas

  • Usa containsKey() antes de get() 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 LinkedHashMap si necesitas orden de inserción
  • Considera usar TreeMap si 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!