Ver Mensaje Individual
  #12 (permalink)  
Antiguo 23/06/2018, 21:35
Avatar de detective_jd
detective_jd
 
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 417
Antigüedad: 8 años, 3 meses
Puntos: 6
Respuesta: Balanceos con Árboles Hash

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 original
  1. private void rotateRight(Entry<K,V> p) {
  2.         Entry<K,V> x = p.left;
  3.         p.left = x.right;
  4.         if (x.right != null)
  5.             x.right.parent = p;
  6.         x.parent = p.parent;
  7.         x.right = p;
  8.         if (p.parent == null) {
  9.             root = (Entry)x;
  10.         } else if (p == p.parent.right){
  11.             p.parent.right = x;
  12.         } else {
  13.             x.parent.left = x;
  14.         }        
  15.     }

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 original
  1. private static void insertAllWithClassOrderAsc(){
  2.         Persona.resetId();
  3.         //MyTreeMap<Integer,Persona> map1 = new MyTreeMap();
  4.         MyTreeMap<Integer,Persona> map1 = new MyTreeMap(new OrdenarDesc());
  5.         MyTreeMap<Integer,Persona> map2 = new MyTreeMap(new OrdenarAsc());
  6.         Persona p1 = new Persona(Persona.getMaxId(), "Juan", 56);
  7.         Persona.maxIdUp();
  8.         Persona p2 = new Persona(Persona.getMaxId(), "Alberto", 73);
  9.         Persona.maxIdUp();
  10.         Persona p3 = new Persona(Persona.getMaxId(), "Julia", 62);
  11.         Persona.maxIdUp();
  12.         Persona p4 = new Persona(Persona.getMaxId(), "Luis", 71);
  13.         Persona.maxIdUp();
  14.         Persona p5 = new Persona(Persona.getMaxId(), "Maria", 18);
  15.         Persona.maxIdUp();
  16.         Persona p6 = new Persona(Persona.getMaxId(), "Pedro", 16);
  17.         Persona.maxIdUp();
  18.         Persona p7 = new Persona(Persona.getMaxId(), "Deborah", 26);
  19.         Persona.maxIdUp();
  20.         Persona p8 = new Persona(Persona.getMaxId(), "Nelson", 37);
  21.         Persona.maxIdUp();
  22.         Persona p9 = new Persona(Persona.getMaxId(), "Tommy", 22);
  23.         Persona.maxIdUp();
  24.         Persona p10 = new Persona(Persona.getMaxId(), "Manuela", 15);
  25.         Persona.maxIdUp();
  26.         map1.put(p1.getId(), p1);
  27.         map1.put(p2.getId(), p2);
  28.         map1.put(p3.getId(), p3);
  29.         map1.put(p4.getId(), p4);
  30.         map1.put(p5.getId(), p5);
  31.         passToMap(map1, map2);
  32.         map2.put(p6.getId(), p6);
  33.         map2.put(p7.getId(), p7);
  34.         map2.put(p8.getId(), p8);
  35.         map2.put(p9.getId(), p9);
  36.         map2.put(p10.getId(), p10);
  37.         map2.put(10, new Persona(10, "Micaela", 21));
  38.         map2.put(6, new Persona(6, "Sergio", 25));
  39.         map2.put(null, new Persona(11, "Sefafin", 7));
  40.         System.out.println("---- prueba 3 ----");
  41.         System.out.println("* tamaño mapa 1: " + map1.size());
  42.         /*map.entrySet().forEach((e) -> {
  43.             System.out.println(e);
  44.         });*/
  45.         System.out.println(map1);
  46.         System.out.println("* tamaño mapa 2: " + map2.size());
  47.         /*map2.entrySet().forEach((e) -> {
  48.             System.out.println(e);
  49.         });*/
  50.         System.out.println(map2);
  51.        
  52.     }
  53.     private static void passToMap(MyTreeMap<Integer,Persona> map1,MyTreeMap<Integer,Persona> map2){
  54.         map1.entrySet().forEach((e) -> {
  55.             map2.put(e.getKey(), e.getValue());
  56.         });
  57.     }

Estas son las clases de ordenación:

Código Java:
Ver original
  1. package treemapsimple;
  2. import java.util.Comparator;
  3. public class OrdenarDesc implements Comparator<Integer>
  4. {
  5.     @Override
  6.     public int compare(Integer o1, Integer o2) {
  7.         return o2 - o1;
  8.     }
  9. }

Código Java:
Ver original
  1. package treemapsimple;
  2. import java.util.Comparator;
  3. public class OrdenarAsc implements Comparator<Integer>
  4. {
  5.     @Override
  6.     public int compare(Integer o1, Integer o2) {
  7.         return o1 - o2;
  8.     }    
  9. }

¿Cuál será el problema?

Espero sus respuestas y saludos.
__________________
Si te interesa, visita mi perfil de Linkedin. Gracias