Hash Tables en Java

🔍 Interfaz Map

Vamos a ver cómo trabajar con Hash Tables en Java 💻
En Java, las tablas hash se implementan a través de la interfaz Map, que define los métodos básicos que toda estructura tipo mapa debe tener.

🔍 Interfaz Map

import java.util.*;

public class DemoHashMap {
    public static void main(String[] args) {

        // Creamos un nuevo HashMap: clave = Integer, valor = String
        Map<Integer, String> empleados = new HashMap<>();

        // Agregamos pares clave-valor
        empleados.put(1, "Mosh");
        empleados.put(2, "John");
        empleados.put(3, "Mary");

        System.out.println(empleados);
    }
}

🧩 Interfaz Map y sus implementaciones

En Java, Map es una interfaz genérica, y tiene muchas implementaciones distintas:

Implementación Descripción
🧠 HashMap La más común y eficiente
🧱 Hashtable Antigua (legado), no recomendada
⚙️ ConcurrentHashMap Para ambientes multithreaded

💡 El 80% del tiempo usarás HashMap.

💾 Insertar y sobrescribir valores

Si agregamos una clave que ya existe, el valor anterior será reemplazado por el nuevo 🔄

// Insertamos un valor duplicando la clave 3
empleados.put(3, "Mary Ann");

// Al imprimir, vemos que el valor anterior fue reemplazado
System.out.println(empleados);

➡️ En los HashMap, no se permiten claves duplicadas, pero sí se pueden tener valores repetidos o nulos (null).

🔍 Método containsKey() y containsValue()

Veamos cómo verificar si una clave o valor existen en el mapa 👇

🔍 Método containsKey() y containsValue()

Veamos cómo verificar si una clave o valor existen en el mapa 👇

// Verifica si existe una clave
System.out.println(empleados.containsKey(3)); // true

// Verifica si existe un valor
System.out.println(empleados.containsValue("John")); // true

containsKey() — Búsqueda directa

👇 Cada celda representa una posición del arreglo interno de la Hash Table.

💡 La función hash calcula la posición exacta → busca directamente la celda 🟩

🐢 containsValue() — Búsqueda secuencial

🔵 En este caso, la tabla no puede usar la función hash — debe revisar cada valor manualmente, celda por celda 🐢

Método Estrategia de búsqueda Complejidad Animación
containsKey() Directa con función hash ⚡ O(1) 🟩 Acceso directo
containsValue() Secuencial 🐢 O(n) 🔵 Recorre todas

🔁 Iterando sobre un HashMap

No se puede iterar directamente sobre un HashMap 🛑, pero podemos hacerlo usando sus vistas (keySet() o entrySet()).

🔁 Iterando sobre un HashMap

// Iterando sobre las claves
for (var key : empleados.keySet())
    System.out.println(key);

// Iterando sobre los pares clave-valor
for (var item : empleados.entrySet())
    System.out.println(item.getKey() + " = " + item.getValue());

🧠 Cada elemento en entrySet() es un par (clave, valor), y podemos obtener cada parte por separado con getKey() y getValue().