2016-07-03 12:32:38 -04:00
|
|
|
public void insertar(String llave, int valor) {
|
|
|
|
// Crear un HashItem que contiene la llave y valor.
|
|
|
|
HashItem hashItem = new HashItem(llave, valor);
|
|
|
|
int hashIndice = hash(hashItem.getLlave());
|
|
|
|
int i = 0;
|
|
|
|
// Buscar un indice vacio.
|
|
|
|
while (hashArray[hashIndice] != null && hashArray[hashIndice].getLlave() != null && i < tamano) {
|
|
|
|
if (hashArray[hashIndice].getLlave().equals(llave)) {
|
|
|
|
//La llave ya existe.
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
hashIndice++;
|
|
|
|
// Si hashIndice es mayor que el tamaño maximo, hay que empezar desde 0.
|
|
|
|
hashIndice = hashIndice % tamano;
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (i != 10) {
|
|
|
|
// Insertar el HashItem en el array.
|
|
|
|
hashArray[hashIndice] = hashItem;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-07-03 14:02:10 -04:00
|
|
|
public int hash(String string) {
|
|
|
|
// Multiplicar por un numero primo(31) para generar mejor hashes.
|
|
|
|
int hash = 31;
|
|
|
|
for (int i = 0; i < string.length(); i++) {
|
|
|
|
// Suma usando cada char del string.
|
|
|
|
hash = hash * 31 + string.charAt(i);
|
|
|
|
}
|
|
|
|
if (hash < 0) {
|
|
|
|
hash = hash * - 1;
|
|
|
|
}
|
|
|
|
return hash % tamano;
|
|
|
|
}
|
|
|
|
|
2016-07-03 12:32:38 -04:00
|
|
|
public class HashItem {
|
|
|
|
final private String llave;
|
|
|
|
final private int valor;
|
|
|
|
|
|
|
|
public HashItem(String llave, int valor) {
|
|
|
|
this.llave = llave;
|
|
|
|
this.valor = valor;
|
|
|
|
}
|
|
|
|
|
|
|
|
public String getLlave() {
|
|
|
|
return llave;
|
|
|
|
}
|
|
|
|
|
|
|
|
public int getValor() {
|
|
|
|
return valor;
|
|
|
|
}
|
|
|
|
}
|