You are on page 1of 24

HashTables

Ciencias de la Computación II
2022
HashTables
• A diferencia de un Direct Address Table, el HashTable tiene
un tamaño menor al número de elementos posibles (U)
• El key, ya no representa la posición del dato, y puede ahora
ser de cualquier tipo.
• Las posiciones de los datos, son calculadas de diferente
forma, ya que ahora ya no existe una asociación directa key-
posición.
HashTables
Ahora que el key puede ser cualquier cosa o tipo de dato, la
relación entre key y valor, es diferente:

Para DIRECT ADDRESS TABLE:


Keys à Values
Ejemplo:
Tabla de lugares
Cualquier 0 à “Maria Lopez”
5 à “Juan Perez”
Posiciones tipo de 6 à “Vinicio Galindo”
de 0 a N valor 9 à “Oscar Grajeda”
HashTables
Ahora que el key puede ser cualquier cosa o tipo de dato, la
relación entre key y valor, es diferente:

Para HASHTABLES:
Keys à Values Ejemplo:
Tabla de passwords
“marial à “1234a”
“jperez à “pwd5”
“vinig”à “palabra”
Cualquier “ograjeda à “xyz”
Cualquier tipo de
tipo de dato valor
HashTables
key (dato)
DATO K Key del dato

El hash value es la hashfunction (k)


posición en la que se
guardará el dato en
la hash table

H hashvalue o
hashcode
HashTables
DATO
0
1
key(dato)
2

H Hashfunction(k)

m
HashTables
0

U h (k2)

h (k1)
k2
K k1 h (k4)

k4
k3

h (k3)
m
HashTables

¿Qué problema hay con tener una tabla de tamaño


mas pequeño al número de keys posibles?
Collision
Dato 1 Dato 2

k1 k2

h(k1) = h(k2)
Collision
0

U h (k1) = h (k2)

k2
K k1 h (k4)

k4
k3

h (k3)
m
Chaining
Existen varias formas de solucionar el problema de
colisiones, pero una de las más utilizadas es:
chaining.

Chaining consiste en que cada casilla de la tabla


guarda una lista encadenada, y no solo un dato.
Chaining
0

U k1 k2

k2
K k1 k4 k5 k6
k5
k4
k3
k6

k3
m
¿Cuándo debemos usar un HashTable?

Un Hashtable es ideal cuando queremos guardar pares de datos


que tienen relacion de uno a uno. (función biyectiva).

Ejemplos:

Usuario à password
Palabra à traducción
Carnet à estudiante
Placa à automóvil
En Java…
En Java hay dos clases que implementan la funcionalidad de una
tabla hash:

Hashtable<K,V> y HashMap<K,V>

Ambas pertenecen a la libreria java.util y ambas


implementan la interfaz Map<K,V>

En esta clase utilizaremos HashMap


HashMap<K,V>

K – type of keys
M – type of values mapped
HashMap<K,V>
Ejemplo usando HashMap<K,V>

1 Declaramos el HashMap

Las keys Los valores


serán de tipo serán de tipo
Integer String
Ejemplo usando HashMap<K,V>

2 Ya se pueden ingresar mappings de datos (key,value)

key valor
Ejemplo usando HashMap<K,V>

3 Desplegar la tabla
Ejemplo usando HashMap<K,V>

4 Acceder a un valor, via key


Ejemplo usando HashMap<K,V>

5 Busqueda por key o por valor


Ejemplo usando HashMap<K,V>

6 Remover un elemento
Ejemplo usando HashMap<K,V>

7 Set de keys en HashMap


Ejemplo usando HashMap<K,V>

8 Set de values en HashMap

You might also like