Hola
CalgaryCorpus los test que he hecho comprobaban los casos favorables es decir cuando funcionan xq cuando no te tira una excepción, depuré el código y estos fueron los errores con los que me encontré:
debug:
java.lang.Exception
at hashsetsimple.test.Test.comprobar_que(Test.java:6)
at hashsetsimple.test.ConstructorTest.creando_set_con _capacidad_de_dos_elementos(ConstructorTest.java:2 9)
at hashsetsimple.test.ConstructorTest.test(Constructo rTest.java:74)
at hashsetsimple.interfaz.Cuerpo.main(Cuerpo.java:10)
java.lang.Exception
at hashsetsimple.test.Test.comprobar_que(Test.java:6)
at hashsetsimple.test.UnionTest.probando_union_normal (UnionTest.java:30)
at hashsetsimple.test.UnionTest.test(UnionTest.java:6 2)
at hashsetsimple.interfaz.Cuerpo.main(Cuerpo.java:20)
BUILD SUCCESSFUL (total time: 33 seconds)
Y adivina ¿dónde está la falla? en que cuando la función hash me calcula el índice hacía uno que ya existe me reemplaza el contenido actual por el nuevo (malditas colisiones) pero también me borra un elemento existente sin invocar el remove.
Por cierto intenté obtener la última entrada del índice con una función privada para luego en addEntry preguntar con un if sí era el último, no funcionaba, intenté con esto ahora:
Código Java:
Ver originalprivate void addEntry(K key, V value){
if(size >= table.length * 0.75){
Entry<K,V>[] tmp = table;
size = 0;
table
= Arrays.
copyOf(table, table.
length * 2); for(int i = 0; i < table.length; i++){
table[i] = null;
}
for (Entry<K, V> e : tmp) {
if(e != null){
put(e.getKey(),e.getValue());
}
}
}
int hash = hash(key,table.length);
Entry<K,V> et = new Entry(key, value,table[hash]);
if(table[hash] == null){
table[hash] = et;
} else {
Entry<K,V> l = this.getLast(hash);
for (Entry e = table[hash]; e != null; e = e.next) {
if(l == e){
e.next = et;
break;
}
}
}
size++;
}
private Entry<K,V> getLast(int hash){
Entry<K,V> l = null;
for (Entry e = table[hash]; e != null; e = e.next) {
l = e;
}
return l;
}
Este código tiene sentido para tí o es una locura enorme??
Dejé más organizado el código:
https://github.com/detectivejd/HashS.../hashsetsimple
Espero sus respuestas y saludos.