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;
    }
}

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;
}

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;
	}
}