Problema resuelto, resulta que era esta línea 93 del rotateRight que era lo que me fallaba, la borré y me anduvo lo más bien quedándome así:
Código Java:
Ver originalprivate void rotateRight(Entry<K,V> p) {
Entry<K,V> x = p.left;
p.left = x.right;
if (x.right != null)
x.right.parent = p;
x.parent = p.parent;
x.right = p;
if (p.parent == null) {
root = (Entry)x;
} else if (p == p.parent.right){
p.parent.right = x;
} else {
x.parent.left = x;
}
}
Pasé a hacer las pruebas de lo que pasa cuando agregas un treemap a otro pero desde pones de uno ordenado de forma decreciente a uno
creciente, hace esto:
Cita: ---- prueba 3 ----
* tamaño mapa 1: 5
[1 -> Persona{1, Nombre: Juan, Edad: 56}]
[2 -> Persona{2, Nombre: Alberto, Edad: 73}]
[3 -> Persona{3, Nombre: Julia, Edad: 62}]
[4 -> Persona{4, Nombre: Luis, Edad: 71}]
[5 -> Persona{5, Nombre: Maria, Edad: 18}]
* tamaño mapa 2: 10
[10 -> Persona{10, Nombre: Micaela, Edad: 21}]
[9 -> Persona{9, Nombre: Tommy, Edad: 22}]
[8 -> Persona{8, Nombre: Nelson, Edad: 37}]
[7 -> Persona{7, Nombre: Deborah, Edad: 26}]
[6 -> Persona{6, Nombre: Sergio, Edad: 25}]
[5 -> Persona{5, Nombre: Maria, Edad: 18}]
El mapa 2 no tiene el 1,2,3 y 4, esta es la prueba que hago:
Código Java:
Ver originalprivate static void insertAllWithClassOrderAsc(){
Persona.resetId();
//MyTreeMap<Integer,Persona> map1 = new MyTreeMap();
MyTreeMap
<Integer,Persona
> map1
= new MyTreeMap
(new OrdenarDesc
()); MyTreeMap
<Integer,Persona
> map2
= new MyTreeMap
(new OrdenarAsc
()); Persona p1 = new Persona(Persona.getMaxId(), "Juan", 56);
Persona.maxIdUp();
Persona p2 = new Persona(Persona.getMaxId(), "Alberto", 73);
Persona.maxIdUp();
Persona p3 = new Persona(Persona.getMaxId(), "Julia", 62);
Persona.maxIdUp();
Persona p4 = new Persona(Persona.getMaxId(), "Luis", 71);
Persona.maxIdUp();
Persona p5 = new Persona(Persona.getMaxId(), "Maria", 18);
Persona.maxIdUp();
Persona p6 = new Persona(Persona.getMaxId(), "Pedro", 16);
Persona.maxIdUp();
Persona p7 = new Persona(Persona.getMaxId(), "Deborah", 26);
Persona.maxIdUp();
Persona p8 = new Persona(Persona.getMaxId(), "Nelson", 37);
Persona.maxIdUp();
Persona p9 = new Persona(Persona.getMaxId(), "Tommy", 22);
Persona.maxIdUp();
Persona p10 = new Persona(Persona.getMaxId(), "Manuela", 15);
Persona.maxIdUp();
map1.put(p1.getId(), p1);
map1.put(p2.getId(), p2);
map1.put(p3.getId(), p3);
map1.put(p4.getId(), p4);
map1.put(p5.getId(), p5);
passToMap(map1, map2);
map2.put(p6.getId(), p6);
map2.put(p7.getId(), p7);
map2.put(p8.getId(), p8);
map2.put(p9.getId(), p9);
map2.put(p10.getId(), p10);
map2.put(10, new Persona(10, "Micaela", 21));
map2.put(6, new Persona(6, "Sergio", 25));
map2.put(null, new Persona(11, "Sefafin", 7));
System.
out.
println("---- prueba 3 ----"); System.
out.
println("* tamaño mapa 1: " + map1.
size()); /*map.entrySet().forEach((e) -> {
System.out.println(e);
});*/
System.
out.
println("* tamaño mapa 2: " + map2.
size()); /*map2.entrySet().forEach((e) -> {
System.out.println(e);
});*/
}
private static void passToMap
(MyTreeMap
<Integer,Persona
> map1,MyTreeMap
<Integer,Persona
> map2
){ map1.entrySet().forEach((e) -> {
map2.put(e.getKey(), e.getValue());
});
}
Estas son las clases de ordenación:
Código Java:
Ver originalpackage treemapsimple;
import java.util.Comparator;
public class OrdenarDesc implements Comparator<Integer>
{
@Override
return o2 - o1;
}
}
Código Java:
Ver originalpackage treemapsimple;
import java.util.Comparator;
public class OrdenarAsc implements Comparator<Integer>
{
@Override
return o1 - o2;
}
}
¿Cuál será el problema?
Espero sus respuestas y saludos.