Tablas Hash

Claves, valores y búsquedas ultrarrápidas ⚡

💡 Introducción: ¿Por qué amar las Tablas Hash?

Las tablas hash son una de las estructuras de datos más poderosas y usadas 🔥.

Nos permiten hacer búsquedas, inserciones y eliminaciones en O(1) promedio.

📘 Aplicaciones clásicas:

  • 📝 Correctores ortográficos (buscar palabras en milisegundos)

  • 📚 Diccionarios bilingües (clave = palabra, valor = traducción)

  • 💻 Compiladores (buscar direcciones de variables y funciones)

  • 🧠 Editores de código (autocompletar, colores, referencias)


🧠 Mismo concepto, distintos nombres

Lenguaje Nombre
Java HashMap
JavaScript Object
Python / C# Dictionary

En todos los casos, almacenan pares (clave, valor)
y permiten acceder a ellos en tiempo constante promedio


🔑 Idea central de una tabla hash

Imagina que queremos guardar empleados y buscarlos por su número de empleado 🧑‍💼

1️⃣ La clave será el número del empleado

2️⃣ El valor será el objeto del empleado

3️⃣ Una función hash calcula la posición donde se guardará


⚙️ Funcionamiento interno

Internamente, una tabla hash usa un arreglo para guardar los datos.

Cuando insertamos:

  • La clave pasa por la función hash

  • Esta genera un índice

  • Y el valor se almacena en esa posición del arreglo 🧩


🧩 Ventajas clave

Velocidad: accesos directos sin recorrer listas

Simplicidad: solo se necesita una función hash

Flexibilidad: admite cualquier tipo de clave

Popularidad: usada en casi todos los lenguajes modernos


⚠️ Pero… ¿Qué pasa si dos claves caen en la misma posición?

Una tabla hash es una estructura que guarda pares (clave, valor) de forma muy rápida.

Para decidir en qué posición guardar algo, usa una función hash, que transforma la clave en un número (el “índice” dentro de un arreglo).

Por ejemplo:

hash("A") = 2
hash("B") = 2
hash("C") = 3

Si “A” y “B” caen en la misma posición (2), ocurre una colisión.

Esto se llama una colisión 💥

Y existen varias formas de resolverla:

1️⃣ Encadenamiento (chaining): cada posición guarda una lista de valores

2️⃣ Dirección abierta (open addressing): busca la siguiente celda libre

(Aquí dos claves distintas dieron el mismo hash y se guardaron en una lista interna)

En cada inserción, el elemento pasa por la función hash y cae en su posición. Cuando otra clave produce el mismo hash, se genera una colisión.

En este ejemplo usamos encadenamiento, es decir, cada celda guarda una lista enlazada de nodos.

Así, la posición 2 contiene los nodos A → B, y la 5 contiene C → E.

🔍 Resumen final

Operación Descripción Complejidad
Insertar Agrega un par (clave, valor) O(1)
Buscar Recupera el valor asociado a una clave O(1)
Eliminar Borra el valor asociado a una clave O(1)

⚡ En promedio, las tablas hash nos ofrecen una eficiencia insuperable.

💬 En la próxima parte aprenderemos cómo implementarlas desde cero en Java 🚀