JuanMtz

ListaArray.java

Mar 2nd, 2020
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.30 KB | None | 0 0
  1. /**
  2.  * Class ListaArray.java
  3.  * Implementación de lista basada en nodos enlazados que se proporciona en el manual de Java,
  4.  * en el Capítulo 9. Estructuras dinámicas lineales.
  5.  * @author Juan José Martínez Solano  02/03/2020
  6.  */
  7.  
  8. public class ListaArray {
  9.  
  10.     // Atributos
  11.     private Object[] arrayElementos;
  12.     private int numElementos;
  13.     private static final int TAMAÑO_INICIAL = 4;
  14.  
  15.     // Métodos
  16.  
  17.     /**
  18.      * Inicializa el array de elementos de la lista.  
  19.      */
  20.     public ListaArray() {
  21.         arrayElementos = new Object[TAMAÑO_INICIAL];
  22.         numElementos = 0;
  23.     }
  24.  
  25.     /**
  26.      * @return número de elementos actual en la lista.
  27.      */
  28.     public int size() {
  29.         return numElementos;
  30.     }
  31.  
  32.     /**
  33.      * Añade un elemento a la lista
  34.      * @param elemento - el elemento a añadir
  35.      */
  36.     public void add(Object elemento) {
  37.         if (numElementos == 0) {
  38.             arrayElementos[0] = elemento;
  39.             numElementos++;
  40.         }
  41.         else {
  42.             comprobarLlenado();
  43.             arrayElementos[numElementos] = elemento;
  44.             numElementos++;
  45.         }
  46.     }
  47.  
  48.     /**
  49.      * Comprueba si el array si el array interno está casi lleno y lo copia
  50.      * ampliando al doble su tamaño.
  51.      */
  52.     private void comprobarLlenado() {
  53.         // El array interno está casi lleno, se duplica el espacio.
  54.         if (numElementos + 1 == arrayElementos.length) {
  55.             Object[] arrayAmpliado = new Object[arrayElementos.length*2];
  56.             System.arraycopy(arrayElementos, 0,
  57.                     arrayAmpliado, 0, numElementos);
  58.             arrayElementos = arrayAmpliado;
  59.         }
  60.     }
  61.  
  62.     /**
  63.      * Inserta un elemento en la posición especificada por el índice.
  64.      * @param indice - indica la posición de inserción en la lista.
  65.      * @param elemento - elemento a insertar.
  66.      * @throws IndexOutOfBoundsException
  67.      */
  68.     public void add(int indice, Object elemento) {
  69.         // El índice debe ser válido.
  70.         if (indice >= numElementos || indice < 0) {
  71.             throw new IndexOutOfBoundsException("Índice incorrecto: "
  72.                     + indice);
  73.         }
  74.         comprobarLlenado();
  75.  
  76.         // Inserción, desplaza los elementos desde índice indicado.
  77.         if (indice < numElementos) {
  78.             System.arraycopy(arrayElementos, indice, arrayElementos,
  79.                     indice+1, numElementos - indice);
  80.         }
  81.         arrayElementos[indice] = elemento;
  82.         numElementos++;
  83.     }
  84.  
  85.  
  86.  
  87.     /**
  88.      * Devuelve el índice de la primera ocurrencia para el objeto especificado.
  89.      * @param elem - el elemento buscado.
  90.      * @return el índice del elemento o -1 si no lo encuentra.
  91.      */
  92.     public int indexOf(Object elem) {
  93.         if (elem == null) {
  94.             for (int i = 0; i < arrayElementos.length; i++) {
  95.                 if (arrayElementos[i] == null) {
  96.                     return i;
  97.                 }
  98.             }
  99.         }
  100.         else {
  101.             for (int i = 0; i < arrayElementos.length; i++) {
  102.                 if (elem.equals(arrayElementos[i])) {
  103.                     return i;
  104.                 }
  105.             }
  106.         }
  107.         return -1;
  108.     }
  109.  
  110.     /**
  111.      * Borra todos los elementos de la lista.
  112.      */
  113.     public void clear() {
  114.         arrayElementos = new Object[TAMAÑO_INICIAL];
  115.         numElementos = 0;
  116.     }
  117.  
  118.     /**
  119.      * Comprueba si existe un elemento.
  120.      * @param elem – el elemento a comprobar.
  121.      * @return true - si existe.
  122.      */
  123.     public boolean contains(Object elem) {
  124.         return indexOf(elem) != -1;
  125.     }
  126.  
  127.     /**
  128.      * Obtiene el elemento-dato por índice.
  129.      * @param indice - posión relativa del nodo que contiene el elemento-dato.
  130.      * @return el dato indicado por el índice de nodo; null si está indefinido.
  131.      * @exception IndexOutOfBoundsException - índice no está entre 0 y numElementos-1.
  132.      */
  133.     public Object get(int indice) {
  134.         // El índice debe ser válido para la lista.
  135.         if (indice >= numElementos || indice < 0) {
  136.             throw new IndexOutOfBoundsException("Índice incorrecto: " + indice);
  137.         }  
  138.         return arrayElementos[indice];
  139.     }
  140.  
  141.  
  142.     /**
  143.      * Elimina el elemento especificado en el índice.
  144.      * @param indice - del elemento a eliminar.
  145.      * @return - el elemento eliminado.
  146.      * @exception IndexOutOfBoundsException - índice no está entre 0 y numElementos-1.
  147.      */
  148.     public Object remove(int indice) {
  149.         // El índice debe ser válido para la lista.
  150.         if (indice >= numElementos || indice < 0) {
  151.             throw new IndexOutOfBoundsException("Índice incorrecto: " + indice);
  152.         }
  153.         // Elimina desplazando uno hacia la izquierda, sobre la posición a borrar.
  154.         Object elem = arrayElementos[indice];
  155.         System.arraycopy(arrayElementos, indice+1, arrayElementos, indice, numElementos - (indice+1));
  156.  
  157.         // Ajusta el último elemento.
  158.         arrayElementos[numElementos-1] = null;
  159.         numElementos--;
  160.         return elem;
  161.     }
  162.  
  163.     /**
  164.      * Elimina el elemento especificado.
  165.      * @param elemento - elemento a eliminar.
  166.      * @return - el índice del elemento eliminado o -1 si no existe.
  167.      */
  168.     public int remove(Object elem) {
  169.         int indice = indexOf(elem);
  170.  
  171.         if (indice != -1) {
  172.             remove(indice);
  173.         }        
  174.         return indice;
  175.     }
  176.  
  177.     public static void main(String[] args){
  178.         ListaArray listaCompra = new ListaArray();
  179.         listaCompra.add("Leche");
  180.         listaCompra.add("Miel");
  181.         listaCompra.add("Aceitunas");
  182.         listaCompra.add("Cerveza");
  183.         listaCompra.remove("Aceitunas");
  184.         listaCompra.add(1, "Fruta");
  185.         listaCompra.add(0, "Queso");
  186.         listaCompra.add(4, "Verduras");
  187.  
  188.         System.out.format("Los %d elementos de la lista de la compra son:\n",  listaCompra.size());
  189.         for (int i = 0; i < listaCompra.size(); i++) {
  190.             System.out.format("%s\n", listaCompra.get(i));
  191.         }
  192.         System.out.format("¿Hay pan en la lista? %b", listaCompra.contains("Pan"));
  193.     }
  194.  
  195. } // class
Advertisement
Add Comment
Please, Sign In to add comment