Ver Mensaje Individual
  #30 (permalink)  
Antiguo 29/08/2018, 20:36
Avatar de detective_jd
detective_jd
 
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años, 7 meses
Puntos: 6
Respuesta: Balanceos con Árboles Hash

Buenas a todos, he tenido mis cosas que hacer por eso no he escrito aquí, en fin he llegado hasta el punto de empezar a implementar las funciones de NavigableMap lo que he adaptado de nuevo es esto:

Código Java:
Ver original
  1. NavigableSubMap(MyTreeMap<K, V> xm,
  2.                 boolean fromStart, K lo, boolean loInclusive,
  3.                 boolean toEnd, K hi, boolean hiInclusive) {
  4.             if (!fromStart && !toEnd) {
  5.                 if(lo == null && hi == null) {
  6.                     xm.clear();
  7.                 } else if(lo != null && hi == null) {
  8.                     xm.compare(lo, lo);
  9.                 } else if(lo == null && hi != null){
  10.                     xm.compare(hi, hi);
  11.                 } else {    
  12.                     if (xm.compare(lo, hi) > 0)
  13.                         throw new IllegalArgumentException("fromKey > toKey");
  14.                 }
  15.             } else {
  16.                 if (!fromStart) // type check
  17.                     if(lo != null){
  18.                         xm.compare(lo, lo);
  19.                     } else {
  20.                         xm.clear();
  21.                     }
  22.                 if (!toEnd)
  23.                     if(hi != null){
  24.                         xm.compare(hi, hi);
  25.                     } else {
  26.                         xm.clear();
  27.                     }
  28.             }
  29.             this.m = xm;
  30.             this.lo = lo;
  31.             this.hi = hi;
  32.             this.fromStart = fromStart;
  33.             this.toEnd = toEnd;
  34.             this.loInclusive = loInclusive;
  35.             this.hiInclusive = hiInclusive;
  36.         }

Al contructor lo validé en caso de que no te salga una excepción en el subMap cuando no le pones parámetros te devolverá una estructura vacía, en caso que pongas sólo el inicio en el final ya esta definido por defecto y viceversa si podes el final te da el inicio definido por defecto.
En headMap y tailMap si no pones ningún parámetro, te devolverá una estructura vacía.

Ahora diré mis dudas, resulta que las funciones lowerKey, floorKey, lastKey y firstKey ¿en que aportan si tienes las entry de cada una? si me dijeras que es para delegar en TreeSet lo entiendo, pero es cómo su get.key.

Por otro lado no entiendo cuál es el sentido de estos iterator: descendingKeySet(), navigableKeySet() y descendingMap().

Los pollFirstEntry y pollLastEntry obtienen su respectivo elemento pero eliminándolo de la estructura ¿que utilidad tiene?

Las funciones getLowerEntry, getFloorEntry, getLastEntry y getFirstEntry funcionan de forma similar pero ¿existe una forma de simplificar estas funciones?

Aquí está el código subido:

Código casero

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