Una colección se puede definir como el conjunto de objetos agrupados en una entidad que posibilitan el manejo de estos de forma centralizada. En java el paquete utils contiene numerosas colecciones que permiten las acciones antes mencionadas. Una de las principales colecciones que otorga este paquete es la estructura llamada ArrayList.

En conctreto la estructura llamada ArrayList es una colección que utiliza la interfaz List capaz de guardar diferentes tipos de datos en su interior de crecimiento automático, por lo que no es necesario definir su tamaño en la definición ya que este varia según se vayan agregando o borrando objetos.

Para poder definir una arraylist se utilizan los siguientes constructores:

ArrayList listaGenerica = new ArrayList();
//constructor que indica el tipo que guardará la colección dinámica
ArrayList<Integer> listaNumeros = new ArrayList<Integer>();
ArrayList<Alumno> listaAlumnos = new ArrayList<Alumno>();

Los principales métodos que se utilizan en un ArrayList son:

// agrega un objeto a la lista teniendo en cuenta la restricción de tipos
listaAlumnos.add(new Alumno("Alumno", "Prueba", 1, 123));
// comprueba si el objeto indicado está presente en la lista
listaAlumnos.contains(new Alumno("Alumno", "Prueba", 1, 123));
// elimina la lista completa
listaAlumnos.clear();
// Obtiene el objeto de la posición indicada. En el caso de no tener indicado el tipo en el constructor
// será obligatorio indicar el casteo a realizar para el objeto seccionado
Alumno alumno = listaAlumnos.get(0);
// pone la referencia del objeto en la posición indicada
listaAlumnos.set(1, new Alumno("Alumno1", "Prueba1", 2, 123));
// comprueba si la lista está vacia
listaAlumnos.isEmpty();
// obtiene el inice del objeto indicado en el método
listaAlumnos.indexOf(new Alumno("Alumno1", "Prueba1", 2, 123));// elimina el objeto situado en la posición indicada
listaAlumnos.remove(1);

Hay que tener en cuenta que la mayoría de los métodos indicados devuelven como valor de ejecución un booleano, por lo que su ejecución además del cometido concreto también se puede utilizar para hacer la correspondiente validación de datos

// validaciones
if (listaAlumnos.add(new Alumno("AlumnoValidado","ApellidoValidado",3,123)))
{
   System.out.println("Alumno agregado correctamente");
}
else
   System.out.println("Fallo en el proceso de agregar");

Algunas de las acciones más comunes a la hora de trabajar con este tipo de colecciones es el listado completo, el borrado condicional, etc…Algunos ejemplos son:

        // listar una lista completa
        if (!listaAlumnos.isEmpty()) {
            for (Alumno a : listaAlumnos) {
                System.out.println(a.getNombre());
            }
        }

        // eliminar un elemento de una lista que cumpla una condición
        if (!listaAlumnos.isEmpty()) {
            for (Alumno a : listaAlumnos) {
                if (a.getNombre().equals("NombreABorrar")){
                    listaAlumnos.remove(a);
                }
            }
        }

Los códigos completos son:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Colecciones;

import java.util.ArrayList;

/**
 *
 * @author Develop
 */
public class ColeccionesDinamicas {

    public static void main(String[] args) {
        ArrayList listaGenerica = new ArrayList();
        //constructor que indica el tipo que guardará la colección dinámica
        ArrayList<Integer> listaNumeros = new ArrayList<Integer>();
        ArrayList<Alumno> listaAlumnos = new ArrayList<Alumno>();

        // agrega un objeto a la lista teniendo en cuenta la restricción de tipos
        listaAlumnos.add(new Alumno("Alumno", "Prueba", 1, 123));
        // comprueba si el objeto indicado está presente en la lista
        listaAlumnos.contains(new Alumno("Alumno", "Prueba", 1, 123));
        // elimina la lista completa
        listaAlumnos.clear();
        // Obtiene el objeto de la posición indicada. En el caso de no tener indicado el tipo en el constructor
        // será obligatorio indicar el casteo a realizar para el objeto seccionado
        Alumno alumno = listaAlumnos.get(0);
        // pone la referencia del objeto en la posición indicada
        listaAlumnos.set(1, new Alumno("Alumno1", "Prueba1", 2, 123));
        // comprueba si la lista está vacia
        listaAlumnos.isEmpty();
        // obtiene el inice del objeto indicado en el método
        listaAlumnos.indexOf(new Alumno("Alumno1", "Prueba1", 2, 123));
        // elimina el objeto situado en la posición indicada
        listaAlumnos.remove(1);
        //obtiene el tamaño de la lista
        listaAlumnos.size();
        
        // validaciones
        if (listaAlumnos.add(new Alumno("AlumnoValidado","ApellidoValidado",3,123))){
            System.out.println("Alumno agregado correctamente");
        }
        else
            System.out.println("Fallo en el proceso de agregar");

        // listar una lista completa
        if (!listaAlumnos.isEmpty()) {
            for (Alumno a : listaAlumnos) {
                System.out.println(a.getNombre());
            }
        }

        // eliminar un elemento de una lista que cumpla una condición
        if (!listaAlumnos.isEmpty()) {
            for (Alumno a : listaAlumnos) {
                if (a.getNombre().equals("NombreABorrar")){
                    listaAlumnos.remove(a);
                }
            }
        }

    }
}

 

package Colecciones;

/**
 *
 * @author Develop
 */
public class Alumno {

    String nombre, apellido;
    int id, telefono;

    public Alumno(String nombre, String apellido, int id, int telefono) {
        this.nombre = nombre;
        this.apellido = apellido;
        this.id = id;
        this.telefono = telefono;
    }

    public String getNombre() {
        return nombre;
    }

    public String getApellido() {
        return apellido;
    }

    public int getId() {
        return id;
    }

    public int getTelefono() {
        return telefono;
    }    
}

Los códigos se pueden descargar desde el repositorio