Ver Mensaje Individual
  #22 (permalink)  
Antiguo 01/05/2017, 22:41
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 muchísimas gracias por responder, no sabés cómo me ayudó tu opinión:

Cita:
Has pensado en usar github o similar?
No creo que el foro sea la mejor manera de iterar sobre el, en realidad, pues es muy extenso y tal vez no sea de mucha utilidad algo como pastebin una vez que recibas comentarios y decidas cambiarlo.
La verdad me había olvidado de github, bueno como eran 2 archivos pensé que no pasaría nada, pero con lo de las pruebas si, lo haré en github la próxima vez.

Cita:
- Elimina de los comentarios que cada metodo empiece con "metodo que ..." o "funcion que ..", es superfluo decirlo.
Ya lo hice

Cita:
- Elimina en genral todos los comentarios superfluos o que no aporten a comprender el codigo. Ejemplo de esto es poner como comentario "constructor" al constructor por default.
Ya lo hice

Cita:
- Por que tu constructor no pide memoria para la tabla?
¿A que te refieres? Puede que haya olvidado el concepto y la idea.

Cita:
- Por que al usar la capacidad de la tabla solo pides memoria para 1 elemento mas. No es razonable aumentar al doble? o aumentar tanto como se pidio al inicio en el constructor?
Me aseguré de que aumenté el doble.

Cita:
- Hay errores de tipeo en los comentarios, por ejemplo dice "incremenatamos", "qye"
Me deshice de eso

Cita:
- capacity no lo usas, eliminalo (o usalo, actualizalo)
Eliminé a capacity por relleno.

Cita:
- al borrar, puesto que no hay orden interno, por que no mueves solo el ultimo elemento a la posicion del que borras, en vez de mover todos 1 lugar?
Hice lo que me dijiste y funcionó, además en las tablas hash el órden es lo que menos importa.

Cita:
- Sugiero hacer varias pruebas pequenas en vez de hacer 1 sola gran prueba. Cada prueba es 1 metodo, en cada prueba creas un hashmap, agregas entradas y pruebas que un cierto metodo del hashmap funciono. Cada prueba ejercita 1 cosa, y el resto de las pruebas asumen que lo que ya probaste no hay que probarlo de nuevo. Puedes probar los distintos constructores que provees, pues ahora estas probando solo 1, que pasa cuando usas un tamano explicito?
Hice todas las pruebas y anda bien, aunque tuve que hacer algunas modificaciones.

Eso es lo que pude hacer
-----------------------------------------------------------------------------------------------------

Cita:
Como esta construido el metodo getIndex solo retorna un valor -1 si es que encuentra el objeto al interior, de modo que es superfluo preguntar una vez que usaste ese metodo si es que el objeto es efectivamente el que buscabas, si esto no fuera asi, tu metodo getIndex estaria mal construido.
Cita:
- Si existiera una manera magica de que dado un objeto con una clave cualquiera te dijera exactamente donde esta o donde deberia ir, sin tener que recorrer el arreglo, y fuera super rapida, la usarias? Eso es lo que esta detras de hashCode que apareces menospreciando al inicio en el comentario inicial. Si tu arreglo creciera a varios miles de datos la funcion magica se hace mas y mas atractiva.
Cita:
- getIndex podria terminar antes la iteracion al encontrar el primer null
No es que menosprecie al HashCode para nada, el problema es que intenté e intenté implementarlo pero no dí al clavo....
Busqué algo llamado búsqueda por transformación de claves pero no hay una implementación y una de esas me manda sólo al principio.

Código Java:
Ver original
  1. public int hash(Object key){
  2.         return key.hashCode() % table.length;
  3.     }

que vimos que no funcionó, sé que logro eso y logro un mini calco de la implementación de Oracle.

Espero sus respuestas y saludos.