Ver Mensaje Individual
  #23 (permalink)  
Antiguo 02/05/2017, 20:19
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

Hola CalgaryCorpus y a todos, estuve mirando lo de hashCode y encontré esto:

Código Java:
Ver original
  1. private int getIndex(Object key) {
  2.         int ret = key.hashCode() % table.length;
  3.         if(ret < 0) {
  4.             ret += table.length;
  5.         }
  6.         return ret;
  7.     }

El cual andar anda, pero cuando quiero agregar más de 4 elementos me hace esto por consola:

---PROBANDO MAP2---
tamaño -> 7

--valores--
John
Paula
Andrea

--claves--
4
1
6

--entradas--
clave -> 4 valor -> John
clave -> 1 valor -> Paula
clave -> 6 valor -> Andrea

cuando en el map2 agregue esto:

Código Java:
Ver original
  1. MyMap<Integer,String>m2= new MyMap(2);
  2.         m2.put(1, "Paula");
  3.         m2.put(2, "Pedro");
  4.         m2.put(3, "Fabio");
  5.         m2.put(4, "John");
  6.         m2.put(5, "Manuela");
  7.         m2.put(6, "Andrea");
  8.         m2.put(7, "Luisa");

Por otro lado hice un pequeño cambio a addEntry xq cómo estaba haciendo de que duplica cuando la cantidad actual es igual al largo es ineficiente debido a la lentitud del mismo, y tuve que cambiar la condición:

Código Java:
Ver original
  1. @Override
  2.     public V put(K key, V value) {
  3.         if(key != null){
  4.             int index = this.getIndex(key);
  5.             if (table[index]!= null && table[index].getKey().equals(key)) {
  6.                 V oldValue = table[index].getValue();
  7.                 table[index].setValue(value);
  8.                 return oldValue;
  9.             }  
  10.             this.addEntry(key, value, index);
  11.             return value;
  12.         }
  13.         return null;
  14.     }
  15.     private void addEntry(K key, V value, int index){
  16.         if(size >= table.length * 3/4){
  17.             table = Arrays.copyOf(table, table.length * 2);
  18.         }
  19.         table[index] = new Entry(key, value);
  20.         size++;
  21.     }

En esta página lo explica mejor: http://www.toves.org/books/data/ch06-hash/

A mi getIndex que tiene el código del hashCode le falta algo pero no sé que, no sé que pueden decir.

Espero sus respuestas y saludos.