Mundo
del Programador

ArrayList

Una colección en java es una estructura de datos que permite almacenar muchos valores del mismo tipo, por tanto, conceptualmente es práctimacamente igual que un array. Según el uso y según si se permiten o no repeticiones, Java dispone de un amplio catálogo de colecciones: ArrayList (lista), ArrayBlockingQueue (cola), HashSet (conjunto), Stack (pila) etc. Nosotros estudiaremos de momento ArrayList.

ArrayList es una estructura en forma de lista que permite almacenar elementos del mismo tipo (incluso objetos), su tamaño cambiando a medida que se añaden o se eliminan elementos.

Diferencias entre arrays y ArrayList o colecciones:

  • cuando se trabaja con array es necesario definir su tamaño cuando se crea y conocer su tamaño cuando se trabaja com el. Con las colecciones no es necesario ya que crece o disminuye en funcion de la necesidad que hay
  • con los array se suele cometer errores cuando se utiliza indices, ya que si intentamos introducir un elemento fuera de rango no se podrá, mientras que con las colecciones no es necesario indicar los indices, porque los elementos se añaden siempre al final de la lista

Métodos de los ArrayList:

  • add(elemento) – añade elemento al final de la lista
  • add(indice, elemento) – inserta un elemento en una posició indicada, desplazando los demás elementos hacia la derecha
  • clear() - elimina todos los elementos, pero no borra la lista
  • contains(elemento) – devuelve true si la lista contiene el elemento que se especifica y false en caso contrario
  • get(indice) – devuelve el elemento de la posición indicada
  • indexOf(elemento) – devuelve la posición de la primera ocurrencia del elemento que se indica entre paréntesis
  • isEmpty() - devuelve true si la lista está vaciá y false en caso de tener algún elemento
  • remove(indice) – elimina el elemento que se encuentra en la posición indicada
  • remove(elemento) – elimina primera ocurrencia de un elemento
  • set(inice, elemento) – machaca el elemento que se encuentra en una determinada posición con el elemento que se pasa como parámetro
  • size() - devuelve el tamaño de la lista
  • toArray() - devuelve un array con todos y cada uno de los elementos que contiene la lista


                  public class EjemploArrayList01 {
                    public static void main(String[] args) {
                      ArrayList<String> a = new ArrayList<String>();
                      System.out.println("Nº de elementos: " + a.size());

                      a.add("rojo");
                      a.add("verde");
                      a.add("azul");

                      System.out.println("Nº de elementos: " + a.size());
                      a.add("blanco");

                      System.out.println("Nº de elementos: " + a.size());
                      System.out.println("El elemento que hay en la posición 0 es " + a.get(0));
                      System.out.println("El elemento que hay en la posición 3 es " + a.get(3));
                    }
                  }
                

Al crear la colección hay que indicar el tipo de dato que se almacenará en las celdas:


                  ArrayList<String> a = new ArrayList<String>();
                  ArrayList<Integer> a = new ArrayList<Integer>();
                

Con las colecciones, al igual que con los array se pueden utilizar los bucles para recorrer todo el array


                  public class EjemploArrayList02 {
                    public static void main(String[] args) {
                      ArrayList<String> a = new ArrayList<String>();

                      a.add("rojo");
                      a.add("verde");
                      a.add("azul");
                      a.add("blanco");
                      a.add("amarillo");

                      System.out.println("Contenido de la lista: ");
                      for(int i=0; i < a.size(); i++) {
                        System.out.println(a.get(i));
                      }
                    }
                  }
                

Pero trabajando con las colecciones es recomendabe usar el bucle for al estilo foreach donde la sintaxis es muy corta y no se necesita ningún indice para crear la estructura.


                  public class EjemploArrayList03 {
                    public static void main(String[] args) {
                      ArrayList<String> a = new ArrayList<String>();

                      a.add("rojo");
                      a.add("verde");
                      a.add("azul");
                      a.add("blanco");
                      a.add("amarillo");

                      System.out.println("Contenido de la lista: ");
                      for(String color: a) {
                        System.out.println(color);
                      }
                    }
                  }
                

Para eliminar un ArrayList se utiliza el método remove(), que se puede pasar como parámetro el indice del elemento que se quiere eliminar, o bien el valor del elemento.


                  public class EjemploArrayList04 {
                    public static void main(String[] args) {
                      ArrayList<String> a = new ArrayList<String>();

                      a.add("rojo");
                      a.add("verde");
                      a.add("azul");
                      a.add("blanco");
                      a.add("amarillo");
                      a.add("blanco");

                      System.out.println("Contenido de la lista: ");
                      for(String color: a) {
                        System.out.println(color);
                      }

                      if (a.contains("blanco")) {
                        System.out.println("El blanco está en la lista de colores");
                      }

                      a.remove("blanco");

                      System.out.println("Contenido de la lista después de quitar la " +
                        "primera ocurrencia del color blanco: ");

                      for(String color: a) {
                        System.out.println(color);
                      }

                      a.remove(2);

                      System.out.println("Contenido de la lista después de quitar el " +
                        "elemento de la posición 2: ");

                      for(String color: a) {
                        System.out.println(color);
                      }
                    }
                  }
                

Veamos un ejemplo ahora que “machaca” una posición del ArrayList. Para esto se utilza set(indice, elemento).


                  public class EjemploArrayList05 {
                    public static void main(String[] args) {
                      ArrayList<String> a = new ArrayList<String>();

                      a.add("rojo");
                      a.add("verde");
                      a.add("azul");
                      a.add("blanco");
                      a.add("amarillo");

                      System.out.println("Contenido del vector: ");
                      for(String color: a){
                        System.out.println(color);
                      }

                      a.set(2, "turquesa");

                      System.out.println("Contenido del vector después de machacar la posición 2: ");
                      for(String color: a) {
                        System.out.println(color);
                      }
                    }
                  }
                

En este ejemplo veremos tambien como añadir un nuevo elemento en la posición indicada, desplazando los demás elementos hacia derecha.


ArrayList de objetos

Una colección ArrayList puede contener objetos que son instancias de clases definidas por el programador. Esto es muy util en aplicaciones de gestión. Veamos un ejemplo de lista de perros, donde cada celda de la lista almacenará un objeto de la clase Perro.


                  public class EjemploArrayList06 {
                    public static void main(String[] args) {
                      ArrayList<String> a = new ArrayList<String>();

                      a.add("rojo");
                      a.add("verde");
                      a.add("azul");
                      a.add("blanco");
                      a.add("amarillo");

                      System.out.println("Contenido de la lista: ");
                      for(String color: a) {
                        System.out.println(color);
                      }

                      a.add(1, "turquesa");

                      System.out.println("Contenido del vector después de insertar en la posición 1: ");
                      for(String color: a) {
                        System.out.println(color);
                      }
                    }
                  }
                


                  public class EjemploArrayList07 {
                    public static void main(String[] args) {
                      ArrayList<Gato> g = new ArrayList<Gato>();

                      g.add(new Gato("Garfield", "naranja", "mestizo"));
                      g.add(new Gato("Pepe", "gris", "angora"));
                      g.add(new Gato("Mauri", "blanco", "manx"));
                      g.add(new Gato("Ulises", "marrón", "persa"));

                      System.out.println("\nDatos de los gatos:\n");
                      for (Gato gatoAux: g) {
                        System.out.println(gatoAux+"\n");
                      }
                    }
                  }
                

Ordenación de un ArrayList

Los elementos de una lista se pueden ordenar con el método sort de tal forma:

                  
                  Collections.sort(lista);
                

Donde sort es un método de la clase que está definido en Collections. Para utilizar este método hay que importar

                  
                  import java.util.Collections;
                


                  public class EjemploArrayList08 {
                    public static void main(String[] args) {
                      ArrayList<Integer> a = new ArrayList<Integer>();

                      a.add(67);
                      a.add(78);
                      a.add(10);
                      a.add(4);

                      System.out.println("\nNúmeros en el orden original:");
                      for (int numero: a) {
                        System.out.println(numero);
                      }

                      Collections.sort(a);

                      System.out.println("\nNúmeros ordenados:");
                      for (int numero: a) {
                        System.out.println(numero);
                      }
                    }
                  }
                

Tamibién es posible ordenar una lista de objetos. En este caso es necesario indicar el criterio de ordenación en la definición de la clsase. En el programa principal se utiliza el método sort al igual que se tratase de una lista de números o palabras.


                  public class EjemploArrayList08 {
                    public static void main(String[] args) {
                      ArrayList<Gato> g = new ArrayList>Gato>();

                      g.add(new Gato("Garfield", "naranja", "mestizo"));
                      g.add(new Gato("Pepe", "gris", "angora"));
                      g.add(new Gato("Mauri", "blanco", "manx"));
                      g.add(new Gato("Ulises", "marrón", "persa"));
                      g.add(new Gato("Adán", "negro", "angora"));

                      Collections.sort(g);

                      System.out.println("\nDatos de los gatos ordenados por nombre:");
                      for (Gato gatoAux: g) {
                        System.out.println(gatoAux+"\n");
                      }
                    }
                  }
                

Luego hay que definir el método compareTo. Este método devolverá un o si los elementos que comparan son iguales, o un número negativo si el primer elemento que se compara es menors que el segundo, o un número positivo en caso contrario. Lo único que debemos escribir en nuestro código es un compareTo con los atributos que queremos comparar.


                  public class Gato implements Comparable<Gato> {
                    private String nombre;
                    private String color;
                    private String raza;

                    public Gato(String nombre, String color, String raza) {
                      this.nombre = nombre;
                      this.color = color;
                      this.raza = raza;
                    }

                    public String getNombre() {
                      return nombre;
                    }

                    public String getRaza() {
                      Colecciones y diccionarios 138
                      return raza;
                    }

                    public String toString() {
                      return "Nombre: " + this.nombre + "\nColor: " + this.color + "\nRaza: " + this.raza;
                    }

                    public int compareTo(Gato g) {
                      return (this.nombre).compareTo(g.getNombre());
                    }

                    public boolean equals(Gato g) {
                      return (this.nombre).equals(g.getNombre());
                    }
                  }
                

Siguiente
Atras