rambo189619

Practica 6 Linked L

Apr 20th, 2013
272
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.43 KB | None | 0 0
  1. package es.ubu.inf.edat.pr06;
  2.  
  3. import java.util.AbstractList;
  4. import java.util.Iterator;
  5. import java.util.ListIterator;
  6.  
  7. /**
  8.  * Esta clase sirve para realizar inserciones en una lista enlazada.
  9.  *
  10.  * @author <A HREF="mailto:[email protected]">Alberto Barriuso Gallo</A>
  11.  * @author <A HREF="mailto:[email protected]">David Cuesta Arnáiz</A>
  12.  * @version 1.0
  13.  * @date 15/04/2013
  14.  *
  15.  * */
  16.  
  17. public class ListaEnlazada<E> extends AbstractList<E> {
  18.     private int contador;
  19.     private Nodo ultimo;
  20.     private Nodo primero;
  21.  
  22.     /**
  23.      * Constructor de la clase.
  24.      */
  25.     public ListaEnlazada() {
  26.         primero = null;
  27.         ultimo = null;
  28.         contador = 0; // Variable para saber cuantas elementos hay en la lista.
  29.     }
  30.  
  31.     /**
  32.      * Método que devuelve el elemento solicitado.
  33.      */
  34.     @Override
  35.     public E get(int arg0) {
  36.         Nodo aux = primero;
  37.         int contadorGet = 0;
  38.         while (aux != null && contadorGet < arg0) {
  39.             aux = aux.getSiguiente();
  40.             contadorGet++;
  41.         }
  42.         return aux.getDato();
  43.     }
  44.  
  45.     /**
  46.      * Método que devuelve el tamaño de la lista.
  47.      */
  48.     @Override
  49.     public int size() {
  50.         return contador;
  51.     }
  52.  
  53.     /**
  54.      * Método para añadir un objeto a la lista.
  55.      */
  56.     public boolean add(E objeto) {
  57.         Nodo nuevo = new Nodo(objeto);
  58.         if (size() == 0) {
  59.             primero = nuevo;
  60.             ultimo = nuevo;
  61.         } else {
  62.             ultimo.setSiguiente(nuevo);
  63.             nuevo.setSiguiente(null);
  64.             ultimo = nuevo;
  65.         }
  66.  
  67.         contador++;
  68.         return true;
  69.     }
  70.  
  71.     /**
  72.      * Método que añade un elemento en la posicion pasada. Método no soportada.
  73.      */
  74.     public void add(int i, E e) {
  75.         throw new UnsupportedOperationException();
  76.     }
  77.  
  78.     /**
  79.      * Método que elimina un objeto en una posicion determinada.
  80.      */
  81.     public E remove(int posicion) {
  82.         E aux = ultimo.getDato();
  83.         Nodo aux1 = null; // Nodos auxiliares.
  84.         Nodo aux2 = null;
  85.  
  86.         if (size() == 0) {
  87.             throw new UnsupportedOperationException("Lista vacia");
  88.         } else if (contador == 1) {
  89.             primero = null;
  90.             ultimo = null;
  91.             if (posicion < 0 || posicion >= size())
  92.                 throw new IndexOutOfBoundsException();
  93.         } else {
  94.             aux1 = primero;
  95.  
  96.             for (int i = 0; i < posicion; i++) {
  97.                 aux2 = aux1;
  98.                 aux1 = aux1.getSiguiente();
  99.                 if (i == posicion - 1) {
  100.                     aux2.setSiguiente(aux1.getSiguiente());
  101.                     ultimo = aux2;
  102.                 }
  103.             }
  104.         }
  105.  
  106.         contador--;
  107.         return aux;
  108.     }
  109.  
  110.     /**
  111.      * Metodo que remueve toda la coleccion.
  112.      */
  113.     public void clear() {
  114.         primero = null;
  115.         ultimo = null;
  116.     }
  117.  
  118.     /**
  119.      * Clase inner de Nodo , en el que se basa toda la lista. Formada por un
  120.      * dato y la posicion del siguiente nodo.
  121.      */
  122.     private class Nodo {
  123.         private E dato;
  124.         private Nodo siguiente;
  125.  
  126.         /**
  127.          * Constructor de la clase Nodo.
  128.          *
  129.          * @param dato
  130.          *            dato que le pasas por referncia.
  131.          */
  132.         public Nodo(E dato) {
  133.             this.dato = dato;
  134.         }
  135.  
  136.         /**
  137.          * Método que devuelve el dato del Nodo.
  138.          *
  139.          * @return dato
  140.          */
  141.         public E getDato() {
  142.             return dato;
  143.         }
  144.  
  145.         /**
  146.          * Método para poner un dato.
  147.          *
  148.          * @param objeto
  149.          *            objeto pasado
  150.          */
  151.         public void setDato(E objeto) {
  152.             this.dato = objeto;
  153.         }
  154.  
  155.         /**
  156.          * Método para poner la direccion del siguiente elemento
  157.          *
  158.          * @return direccion del siguiente elemento.
  159.          */
  160.         public Nodo getSiguiente() {
  161.             return siguiente;
  162.         }
  163.  
  164.         /**
  165.          * Método para poner la direccion del siguiente elemento.
  166.          *
  167.          * @param siguiente
  168.          *            direccion del siguiente elemento.
  169.          */
  170.         public void setSiguiente(Nodo siguiente) {
  171.             this.siguiente = siguiente;
  172.         }
  173.  
  174.     }
  175.  
  176.     /**
  177.      * Clase Iterador.
  178.      */
  179.     @Override
  180.     public Iterator<E> iterator() {
  181.  
  182.         return new ListIterator<E>() {
  183.             private int contador2 = 0; // Variable para saber la posicion
  184.                                         // actual.
  185.             private E aux = null;
  186.             private Nodo actual = primero;
  187.  
  188.             /**
  189.              * Método hasNext que nos dice si hay un elemento.
  190.              */
  191.             @Override
  192.             public boolean hasNext() {
  193.                 if (actual == null)
  194.                     return false;
  195.                 else
  196.                     return true;
  197.             }
  198.  
  199.             /**
  200.              * Método que nos devuelve el siguiente objeto.
  201.              */
  202.             @Override
  203.             public E next() {
  204.                 if (size() == 0) {
  205.                     throw new UnsupportedOperationException("Lista vacia");
  206.  
  207.                 } else {
  208.                     if (actual != null) {
  209.                         aux = actual.getDato();
  210.                         actual = actual.getSiguiente();
  211.                     }
  212.  
  213.                 }
  214.  
  215.                 contador2++;
  216.                 return aux;
  217.             }
  218.  
  219.             /**
  220.              * Método hasPrevious que nos dice si hay un elemento anterior.
  221.              */
  222.             @Override
  223.             public boolean hasPrevious() {
  224.                 if (actual == primero)
  225.                     return false;
  226.                 else
  227.                     return true;
  228.             }
  229.  
  230.             /**
  231.              * Método que nos dice la posicion actual que esta recorriendo el iterador.
  232.              */
  233.             @Override
  234.             public int nextIndex() {
  235.                 return contador2;
  236.             }
  237.  
  238.             /**
  239.              * Método que nos devuelve el dato anterior.
  240.              */
  241.             @Override
  242.             public E previous() {
  243.                 Nodo anterior = primero;
  244.  
  245.                 if (size() == 0) {
  246.                     throw new UnsupportedOperationException("Lista vacia");
  247.                 } else if (primero == ultimo) {
  248.                     aux = get(0);
  249.                 } else {
  250.                     if (contador < size()) {
  251.                         aux = actual.getDato();
  252.                         while (anterior != actual) {
  253.                             anterior.getSiguiente();
  254.                         }
  255.                         actual.setSiguiente(anterior);
  256.                     }
  257.  
  258.                 }
  259.  
  260.                 contador2--;
  261.                 return aux;
  262.             }
  263.  
  264.             /**
  265.              * Método que nos devuelve el dato anterior.
  266.              */
  267.             @Override
  268.             public int previousIndex() {
  269.                 return contador2;
  270.             }
  271.  
  272.            
  273.             // Métodos NO utilizados
  274.             @Override
  275.             public void set(E arg0) {
  276.                 throw new UnsupportedOperationException();
  277.  
  278.             }
  279.  
  280.             @Override
  281.             public void remove() {
  282.                 throw new UnsupportedOperationException();
  283.             }
  284.  
  285.             @Override
  286.             public void add(E arg0) {
  287.                 throw new UnsupportedOperationException();
  288.             }
  289.  
  290.         };
  291.     }
  292. }
Advertisement
Add Comment
Please, Sign In to add comment