Ver Mensaje Individual
  #6 (permalink)  
Antiguo 07/01/2016, 21:03
Avatar de detective_jd
detective_jd
 
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años, 1 mes
Puntos: 6
Respuesta: Estuctura para paginar

Hola a todos, me respondo a mi mismo y pongo las versiones experimentales de mis estructuras de datos para paginar:

PagesList (actualmente está en su versión 2.8)

Código Java:
Ver original
  1. /*
  2.  * @author Nelson Eustaquio
  3.  * @author Juan Diego Ocampo
  4.  * @param <E>
  5.  */
  6. public class PagesList<E> implements java.util.RandomAccess, java.io.Serializable {
  7.     public enum Navegate {
  8.         goToFirst,
  9.         goToPrevious,
  10.         goToNext,
  11.         goToLast,
  12.         goToPresent
  13.     }
  14.     private final java.util.ArrayList<java.util.ArrayList<E>>paginas=new java.util.ArrayList();
  15.     private final int limite;
  16.     private int pagina;
  17.     private int tamanio;
  18.     private int ultima;
  19.     private int filas;
  20.     public PagesList() {
  21.         this.limite = 12;
  22.         this.clear();
  23.     }
  24.     public PagesList(int xlimite) {
  25.         this.limite = xlimite;
  26.         this.clear();
  27.     }
  28.     private java.util.ArrayList<E> getNext() {
  29.         return (pagina == ultima) ? getLast() : paginas.get(++pagina);
  30.     }
  31.     private java.util.ArrayList<E> getPrevious() {
  32.         return (pagina == 0) ? getFirst() : paginas.get(--pagina);
  33.     }
  34.     private java.util.ArrayList<E> getFirst() {
  35.         return (pagina != 0) ? paginas.get((pagina = 0)) : paginas.get((pagina = 0));
  36.     }
  37.     private java.util.ArrayList<E> getLast() {
  38.         return (pagina != ultima) ? paginas.get((pagina = ultima)) : paginas.get((pagina = ultima));
  39.     }
  40.     private java.util.ArrayList<E> getActually() {
  41.         return paginas.get(pagina);
  42.     }
  43.     public java.util.ArrayList<E> getReloadPage(Navegate opcion) {
  44.         switch (opcion) {
  45.             case goToFirst:
  46.                 getFirst();
  47.                 break;
  48.             case goToPrevious:
  49.                 getPrevious();
  50.                 break;
  51.             case goToNext:
  52.                 getNext();
  53.                 break;
  54.             case goToLast:
  55.                 getLast();
  56.                 break;
  57.         }
  58.         return getActually();
  59.     }
  60.     public synchronized void add(E objeto) throws Exception {
  61.         if (objeto == null) {
  62.             throw new Exception("elemento nulo");
  63.         }
  64.         else if (limite == filas) {
  65.             filas = 0;
  66.             java.util.ArrayList<E> t = new java.util.ArrayList(limite);
  67.             paginas.add(t);
  68.             ultima++;
  69.             paginas.get(ultima).add(objeto);
  70.             tamanio++;
  71.             filas++;
  72.         } else {
  73.             paginas.get(ultima).add(objeto);
  74.             filas++;
  75.         }
  76.     }
  77.     public E get(int posicion) {
  78.         return getActually().get(posicion);
  79.     }
  80.     public final void clear() {
  81.         paginas.clear();
  82.         this.pagina = 0;
  83.         this.filas = 0;
  84.         this.ultima=0;
  85.         java.util.ArrayList t = new java.util.ArrayList(limite);
  86.         paginas.add(t);
  87.         this.tamanio = 1;
  88.     }
  89.     public boolean contains(Object objeto) {
  90.         return this.indexOf(objeto) >= 0;
  91.     }
  92.     private int indexOf(Object objeto) {
  93.         java.util.ArrayList<E> arreglo = this.toList();
  94.         if (objeto == null) {
  95.             for (int i = 0; i < arreglo.size(); i++) {
  96.                 if (arreglo.get(i) == null) {
  97.                     return i;
  98.                 }
  99.             }
  100.         } else {
  101.             for (int i = 0; i < arreglo.size(); i++) {
  102.                 if (objeto.equals(arreglo.get(i))) {
  103.                     return i;
  104.                 }
  105.             }
  106.         }
  107.         return -1;
  108.     }
  109.     public synchronized void remove(E objeto) {
  110.         this.getActually().remove(objeto);
  111.         java.util.ArrayList<E> arreglo = this.toList();
  112.         this.clear();
  113.         for (E obj : arreglo) {
  114.             try {
  115.                 this.add(obj);
  116.             } catch (Exception ex) {
  117.                 System.out.println(ex.getMessage());
  118.             }
  119.         }
  120.     }
  121.     public synchronized java.util.ArrayList<E> toList() {
  122.         java.util.ArrayList<E> aux = new java.util.ArrayList();
  123.         for (java.util.ArrayList<E> list : paginas) {
  124.             for (E row : list) {
  125.                 aux.add(row);
  126.             }
  127.         }
  128.         return aux;
  129.     }
  130.     public int size() {
  131.         return tamanio;
  132.     }
  133.     public boolean isEmpty(){
  134.         return getFirst().isEmpty();
  135.     }
  136.     public void sort() {
  137.         this.sort(null);
  138.     }
  139.     public synchronized void sort(java.util.Comparator comp) {
  140.         java.util.ArrayList<E> arreglo = this.toList();
  141.         java.util.Collections.sort(arreglo, comp);
  142.         this.clear();
  143.         for (E obj : arreglo) {
  144.             try {
  145.                 this.add(obj);
  146.             } catch (Exception ex) {
  147.                 System.out.println("Error al ordenar elementos" + ex.getMessage());
  148.             }
  149.         }
  150.     }
  151.     public PagesList<E> copyTo() {
  152.         PagesList<E> copia = new PagesList(limite);
  153.         for (java.util.ArrayList<E> arreglo : paginas) {
  154.             for (E obj : arreglo) {
  155.                 try {
  156.                     copia.add(obj);
  157.                 } catch (Exception ex) {
  158.                     System.out.println(ex.getMessage());
  159.                 }
  160.             }
  161.         }
  162.         return copia;
  163.     }
  164. }