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