Ver Mensaje Individual
  #3 (permalink)  
Antiguo 31/05/2017, 22:57
Avatar de detective_jd
detective_jd
 
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años
Puntos: 6
Respuesta: TablaHash y sus pasos

Hola CalgaryCorpus, mira que hice las siguientes cosas:

Cita:
No mire' todo exhaustivamente, eso lo tienes que hacer tu, pero lo que mire es que la interseccion claramente esta mal, a menos que sea yo el que entienda mal lo que escribiste. Al leer el codigo pense', como puedes borrar de un conjunto un elemento que NO esta en ese conjunto? Eso es lo que dice tu codigo.
Eso esta corregido, el removeAll y el retainAll lo arreglé, no tenía muy claro lo que hacía xq eran nuevos para mí.

Cita:
Haz un test que pruebe la interseccion matematicamente: dados 2 conjuntos con elementos comunes, la interseccion deberia obtener los elementos comunes, tienes una prueba asi? estas comprobando que la interseccion efectivamente obtiene los elementos comunes de los 2 conjuntos involucrados?

Lo mismo con todos los tests, haz las pruebas matematicas de conjuntos. No pruebes solamente que tus metodos se ejecutan, sino que los resultados tengan sentido matematico.

Los sets te daran muchas oportunidades de probar otras cosas, por ejemplo hacer interseccion o union de un conjunto sobre si mismo.

S interseccion S => S
S union S => S

O hacer interseccion o union con el conjunto vacio, interseccion de 2 conjuntos disjuntos, interseccion e union de conjunto vacio, etc.
La verdad esos no los tenía pero puse los test de intersección, diferencia, subconjunto, unión. Sólo que el de la unión normal no anda por la función hash que me saca un elemento existente para agregar uno de la colección.

¿Recuerdas el problema de la capacidad? lo resolví cambiando:

de esto:

Código Java:
Ver original
  1. if(size >= table.length * 3/4){

a esto:

Código Java:
Ver original
  1. if(size >= table.length * 1/2){

pero en vista al fallo de ahora que parece que es el mismo problema parece que hay algo que le falta al HashMap (MyMap.java) pero no sé que le falta.

Cita:
Las preguntas que haces al inicio no tienen que ver con Java, sino con estructuras de datos. Lista y Set son ambas colecciones de elementos, pero el set tiene caracteristicas que la lista no, y viceversa. En un set los elementos no estan repetidos, no existe orden necesariamente. Un set o conjunto, es un conjunto si cumple propiedades matematicas, sino el nombre no calzaria. Se definen operaciones sobre los conjuntos, union, interseccion, etc. Sugiero leas respecto a las estructuras de datos que quieres implementar, no ponerte a implementar sin entenderlas.
Se que las listas se manejan con posiciones para todas sus funcionalidades y que puedes ordenar sus datos, y que con los conjuntos (set) evitan los duplicados de datos, eso lo sabía, lo que me llamaba la atención que las firmas de sus funcionalidades sean las mismas en sus respectivas interfaces pero al ver que heredan de Collection me debo callar la boca xq aplican lo que llamamos principio de dependencia "una entidad de alto nivel no debe depender de otra de bajo nivel, sino de intermediarias".

Pero lo del problema de la función hash me preocupa.

Aquí pongo el repositorio del código:

https://github.com/detectivejd/HashS.../hashsetsimple

Espero sus respuestas y Saludos.