Ver Mensaje Individual
  #3 (permalink)  
Antiguo 18/04/2017, 21:11
Avatar de detective_jd
detective_jd
 
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años, 7 meses
Puntos: 6
Respuesta: Implementar TablaHash

Buenas a todos, estuve mirando el código que encontré y lo que me falla son los índices que me obtienen las funciones nunca me ponen en la posición 0 cuando se agregan por primera vez elementos de la tablahash:

Código Java:
Ver original
  1. public V put(K key, V value) {
  2.         if(key == null){
  3.             return null;
  4.         }
  5.         int index = getIndex(key); // acá no me obtiene el índice correcto me obtiene cualquier cosa
  6.         Pair<K, V> pair = table[index];
  7.         if (pair != null && (pair.key == key ||  pair.key.equals(key))) {
  8.             V oldValue = pair.value;
  9.             pair.value = value;
  10.             return oldValue;
  11.         }
  12.         setPair(key, value, index);        
  13.         return value;
  14.     }
  15. // funcion para obtener el hashCode de la clave
  16.     private int hashFunction(Object key) {  
  17.         if (key == null)
  18.             return 0;
  19.         String str = key.toString();
  20.         int summation = 0;
  21.         for (int i = 0; i < str.length(); i++)
  22.             summation += str.charAt(i);
  23.         return summation;
  24.     }
  25. // función para obtener el índice
  26.     private int getIndex(Object key) {
  27.         int hash = hashFunction(key);
  28.         return hash % capacity;
  29.     }
  30.     private void setPair(K key, V value, int index) {
  31.         Pair<K, V> e = table[index];
  32.         while (e != null) {
  33.             index++;
  34.             if (index >= capacity) {
  35.                 table = Arrays.copyOf(table, table.length +1);
  36.                 put(key,value);
  37.                 return;
  38.             }
  39.             e = table[index];
  40.         }
  41.         table[index] = new Pair<>(key, value);
  42.         size++;
  43.     }

El punto es que busqué en internet y no encontré una solución acorde a lo que quiero y lo peor es que usan de forma parecida para obtener los índices de los hash....

Por favor, alguna respuesta, la agradeceré.