15.1 ARRAYLIST I

 

Buenas, empezamos un nuevo bloque dedicado a los ArrayList.

ArrayList permite crear listas dinámicas es un array que sin necesidad de indicarle cuantos elementos va almacenar en su interior la lista va creciendo a medida que nosotros vamos incluyendo elementos en su interior. Para verlo más claro me he creado un nuevo proyecto en Eclipse al que he llamado ArrayList dentro del proyecto un paquete al he llamado arraylist y una clase Uso_empleado cuyo código es el siguiente:

package arraylist;

 

public class Uso_empleado {

 

      public static void main(String[] args) {

           

            Empleado listaEmpleado[] = new Empleado[3];

           

            listaEmpleado[0] = new Empleado("Antonio", 25, 1100);

           

            listaEmpleado[1] = new Empleado("Carmen", 32, 1800);

           

            listaEmpleado[2] = new Empleado("Paco", 45, 2100);

           

            for(Empleado e : listaEmpleado) {

                 

                  System.out.println(e.dameDatos());

            }

 

      }

 

}

class Empleado{

     

      public Empleado(String nombre, int edad, double salario) {

           

            this.nombre = nombre;

           

            this.edad = edad;

           

            this.salario = salario;

           

           

      }

     

      public String dameDatos() {

           

            return "El empleado se llama "+nombre+" tiene "+edad+" años "+" y un sueldo de "+salario;

      }

     

      private String nombre;

     

      private int edad;

     

      private double salario;

}

Es un código que si seguís el tutorial os va a resultar familiar y muy sencillo. Es una clase que crea objetos de tipo empleado. Esta la clase Empleado con su constructor en el que hemos inicializado las variables, un método que nos va a dar la descripción de cada empleado: nombre, edad y sueldo. En el método main creamos un array de tipo Empleado que lo rellenamos de objetos de tipo Empleado, si ejecutamos este archivo:



Si queremos añadir un nuevo objeto de tipo Empleado:



Probamos:



Nos da un error porque hemos excedido el número de elementos que puede disponer el array. Para solucionar el error tendríamos que añadir que en lugar de 3 elementos tenga 4 elementos el array. Sin embargo, si este array tuviera 100 o más elementos o no supiéramos a ciencia cierta cuantos elementos va a componer el array sería incomodo cambiar el número de elementos en el array cada vez que tuviéramos que añadir un nuevo objeto, para solucionar esto se utilizan la clase ArrayList, de forma que podemos ir añadiendo elementos sin necesidad de indicar el número de elementos que lo va a componer.

Explicado esto comentamos las líneas de código de la clase de ejemplo en la que creamos el array y cada elemento que compone el array:



Lo primero es importarnos el paquete java.util que contiene la clase ArrayList y empezamos a utilizar esta clase, lo haríamos de la siguiente forma:

ArrayList<Empleado> listaEmpleado = new ArrayList<Empleado>();

Le indicamos como parámetro el tipo de dato que va almacenar ArrayList después tenemos que indicar el nombre que va a tener el ArrayList. Para añadir los elementos al ArrayList:

ArrayList<Empleado> listaEmpleado = new ArrayList<Empleado>();

           

            listaEmpleado.add(new Empleado("Antonio", 25, 1100));

           

            listaEmpleado.add(new Empleado("Carmen", 32, 1800));

           

            listaEmpleado.add(new Empleado("Paco", 45, 2100));

           

            listaEmpleado.add(new Empleado("Susi", 38, 1200));

Para añadir los elementos utilizamos el método add(). Si ejecutamos:



Vemos que funciona perfectamente. Si queremos añadir nuevos elementos solo hay que añadirlos y ya está:

ArrayList<Empleado> listaEmpleado = new ArrayList<Empleado>();

           

            listaEmpleado.add(new Empleado("Antonio", 25, 1100));

           

            listaEmpleado.add(new Empleado("Carmen", 32, 1800));

           

            listaEmpleado.add(new Empleado("Paco", 45, 2100));

           

            listaEmpleado.add(new Empleado("Susi", 38, 1200));

           

            listaEmpleado.add(new Empleado("Jorge", 28, 1200));

           

            listaEmpleado.add(new Empleado("Raquel", 28, 1200));

Recomiendo ir a la API de Java para conocer más el uso de esta clase y ver también que en este ejemplo hemos utilizado el constructor por defecto:



La definición que nos da este tipo de constructor es que la capacidad inicial de la lista es de 10 esto nos puede llevar a confusión. Si creamos cinco elementos más:

            ArrayList<Empleado> listaEmpleado = new ArrayList<Empleado>();

           

            listaEmpleado.add(new Empleado("Antonio", 25, 1100));

           

            listaEmpleado.add(new Empleado("Carmen", 32, 1800));

           

            listaEmpleado.add(new Empleado("Paco", 45, 2100));

           

            listaEmpleado.add(new Empleado("Susi", 38, 1200));

           

            listaEmpleado.add(new Empleado("Jorge", 28, 1200));

           

            listaEmpleado.add(new Empleado("Raquel", 28, 1200));

           

            listaEmpleado.add(new Empleado("Sonia", 19, 990));

           

            listaEmpleado.add(new Empleado("Celia", 18, 990));

           

            listaEmpleado.add(new Empleado("Amparo", 23, 1090));

           

            listaEmpleado.add(new Empleado("Carlos", 25, 1100));

           

            listaEmpleado.add(new Empleado("Julia", 25, 1100));

La aplicación sigue funcionando correctamente:



Podemos indicarle mediante el método size() cuantos elementos tiene el ArrayList, después de los elementos del ArrayList escribimos lo siguiente:

System.out.println(listaEmpleado.size());

Ejecutamos:



Como es posible que en la API de Java nos indique que tiene una capacidad de 10 cuando permite tener más de 10 elementos. Lo que sucede es un proceso interno al utilizar el constructor por defecto lo que ocurre es que se reserva un espacio en la memoria donde se almacenarán en principio 10 elementos si añadimos un elemento más se crea una copia diferente de otro ArrayList donde almacena esos 11 elementos, esto lo que ocasiona es que consume más recursos que los necesarios, en aplicaciones de este tipo no tiene importancia pero en aplicaciones complejas con muchos elementos puede ser un problema ya que puede llegar a bloquearse la aplicación durante su ejecución o registrar lentitud. Para evitar esto hay que indicarle que vamos a utilizar más de diez elementos y para ello utilizamos el método ensureCapacity(), después de la declaración del ArrayList escribimos lo siguiente:

listaEmpleado.ensureCapacity(11);

Le indicamos como parámetro el número de elementos que va a componer el ArrayList y así evitamos el consumo de recursos en el equipo. Aún así si añadimos más de 11 elementos el programa va a funcionar correctamente pero estaremos en la misma situación que antes que se creará una copia en la memoria del ArrayList con los nuevos elementos y consumirá más recursos de lo esperado. Vamos a comentar la siguiente línea de código:

//listaEmpleado.ensureCapacity(11);

Añadimos nuevos elementos, un total de 14. Como en un principio no sabíamos cuántos elementos iba a estar compuesto el ArrayList no le hemos indicado la capacidad mediante el método ensureCapacity(), lo que hace que cada vez que llegue a diez elementos crea una copia en la memoria del ordenador de forma que esa copia es más extensa, lo que va a consumir recursos como ya se ha comentado para optimizar los recursos del ordenador utilizamos el método trimToSize() lo hacemos después del último elemento del ArrayList:

listaEmpleado.trimToSize();

Con esto conseguimos cortar el exceso de memoria ajusta la capacidad del ArrayList al número de elementos que este tiene.

Con cualquier duda podéis escribir en los comentarios del blog y entre todos ayudarnos. Muchas gracias por seguirme, hasta pronto!

14.2 CLASE FILE II << >> 15.2 ARRAYLIST II




No hay comentarios:

Publicar un comentario