Este es el problema, resulta que tengo el siguiente error:
Cita:
Lo que no me doy cuenta es dónde está la falla del remove de MyTreeMap porque el primer elemento lo borra pero el siguiente no, sacando a Franco de la línea 43 de la clase DownTest.java anda, por alguna razón no me borra Franco:java.lang.Exception
at treesetsimple.test.Test.comprobar_que(Test.java:6)
at treesetsimple.test.DownTest.probando_borrado(DownT est.java:36)
at treesetsimple.test.DownTest.test(DownTest.java:44)
at treesetsimple.interfaz.Cuerpo.main(Cuerpo.java:13)
at treesetsimple.test.Test.comprobar_que(Test.java:6)
at treesetsimple.test.DownTest.probando_borrado(DownT est.java:36)
at treesetsimple.test.DownTest.test(DownTest.java:44)
at treesetsimple.interfaz.Cuerpo.main(Cuerpo.java:13)
Código Java:
Ver original
Este es el remove de MyTreeSet (en las líneas 52, 53 y 54) que delega de MyTreeMap:
Código Java:
Ver original
@Override return map.remove(o) == PRESENT; }
Es el remove de MyTreeMap.java dónde supuestamente estaría el error:
Código Java:
Ver original
@Override Entry<K,V> p = getEntry(key); if (p == null) { return null; } else { V oldValue = p.value; deleteEntry(p); return oldValue; } } private void deleteEntry(Entry<K,V> p) { size--; Entry<K,V> tmp = new Entry(); Entry<K,V> y = (leftOf(p) == null || rightOf(p) == null) ? p : higherEntry(p.getKey()); Entry<K,V> x = (leftOf(y) != null) ? leftOf(y) : (rightOf(y) != null ? rightOf(y) : tmp); x.parent = parentOf(y); if (parentOf(y) == null) { root = (x == tmp ? null : x); } else { if (y == leftOf(parentOf(y))) { y.parent.left = (x == tmp) ? null : x; } else { y.parent.right = (x == tmp) ? null : x; } } if (y != p){ p = y; } if (colorOf(y) == BLACK) { fixDown(x); } } private void fixDown(Entry<K,V>x){ while(x != root && colorOf(x) == BLACK) { if(x == parentOf(leftOf(x))) { Entry<K,V> sib = parentOf(rightOf(x)); if(colorOf(sib) == RED) { setColor(sib, BLACK); setColor(parentOf(x), RED); rotateLeft(x.parent); sib = parentOf(rightOf(x)); } if(colorOf(leftOf(sib)) == BLACK && colorOf(rightOf(sib)) == BLACK) { setColor(sib, RED); x = parentOf(x); } else { if(colorOf(rightOf(sib)) == BLACK) { setColor(leftOf(sib), BLACK); setColor(sib, RED); rotateRight(sib); sib = rightOf(parentOf(x)); } setColor(sib, colorOf(parentOf(x))); setColor(parentOf(x), BLACK); setColor(rightOf(sib), BLACK); rotateLeft(x.parent); x = root; } } else { Entry<K,V> sib = leftOf(parentOf(x)); if(colorOf(sib) == RED) { setColor(sib, BLACK); setColor(parentOf(x), RED); rotateRight(x.parent); sib = leftOf(parentOf(x)); } if(colorOf(rightOf(sib)) == BLACK && colorOf(leftOf(sib)) == BLACK){ setColor(sib, RED); x = parentOf(x); } else { if(colorOf(leftOf(sib)) == BLACK) { setColor(rightOf(sib), BLACK); setColor(sib, RED); rotateLeft(sib); sib = leftOf(parentOf(x)); } setColor(sib, colorOf(parentOf(x))); setColor(parentOf(x), BLACK); setColor(leftOf(sib), BLACK); rotateRight(x.parent); x = root; } } } setColor(x, BLACK); }
Puse los métodos que usa internamente remove por si la falla está en dónde menos espero.
Espero sus respuestas y saludos.