Sadot Hernández

Java ArrayList Tutorial con Ejemplos

PublicadoNovember 06, 2021

Java ArrayList: Cómo usar, métodos y ejemplos de ArrayList

image

1. Java ArrayList Tutorial con Ejemplos

Un ArrayList en Java se utiliza para almacenar una colección de elementos de tamaño dinámico. A diferencia de los Arrays que tienen un tamaño fijo, un ArrayList aumenta su tamaño automáticamente cuando se le añaden nuevos elementos.

ArrayList es parte del Framework Collection de Java e implementa la interfaz de List.

Los siguientes son algunos puntos clave a tener en cuenta sobre ArrayList en Java:

  • Un ArrayList es un array redimensionable, también llamado array dinámico. Crece su tamaño para acomodar nuevos elementos y se reduce el tamaño cuando los elementos se eliminan.
  • ArrayList utiliza internamente un array para almacenar los elementos. Al igual que los arrays, permite recuperar los elementos por su índice.
  • Java ArrayList permite valores duplicados y nulos.
  • Java ArrayList es una colección ordenada. Mantiene el orden de inserción de los elementos.
  • No se puede crear un ArrayList de tipos primitivos como int, char, etc. Es necesario utilizar tipos de caja como Integer, Character, Boolean, etc.
  • Los ArrayList de Java no están sincronizados. Si varios hilos intentan modificar un ArrayList al mismo tiempo, el resultado final será no determinista. Debes sincronizar explícitamente el acceso a un ArrayList si varios hilos van a modificarlo.

2. Creando una ArrayList y añadirle nuevos elementos

Este ejemplo muestra:

  • Cómo crear un ArrayList utilizando el constructor ArrayList().
  • Añadir nuevos elementos a un ArrayList utilizando el método add().
import java.util.ArrayList;
import java.util.List;

public class CrearArrayList {

    public static void main(String[] args) {
        
        // Creando un ArrayList de String
        List<String> animales = new ArrayList<>();

        // Agregando un nuevos elementos al ArrayList
        animales.add("León");
        animales.add("Tigre");
        animales.add("Gato");
        animales.add("Perro");

        System.out.println(animales);

        // Agregando un elemento apartir de un indice en particular en un ArrayList
        animales.add(2, "Elefante");

        System.out.println(animales);

    }
}

Output:

[León, Tigre, Gato, Perro]
[León, Tigre, Elefante, Gato, Perro]

Ejemplo: https://www.online-ide.com/mKetgzakWI

3. Creando un ArrayList de otra colección

Este ejemplo muestra:

  • Cómo crear un ArrayList de otra colección usando el contructor ArrayList(Collection c).
  • Como agregar todos los elementos de un colección existente a un ArrayList usando el método addAll().
import java.util.ArrayList;
import java.util.List;

public class CrearArrayListDeCollection {

    public static void main(String[] args) {
        
        List<Integer> primeroCincoNumerosPrimos = new ArrayList<>();
        
        primeroCincoNumerosPrimos.add(2);
        primeroCincoNumerosPrimos.add(3);
        primeroCincoNumerosPrimos.add(5);
        primeroCincoNumerosPrimos.add(7);
        primeroCincoNumerosPrimos.add(11);

        // Creando un ArrayList de otra colección
        List<Integer> primerosDiezNumerosPrimos = new ArrayList<>(primeroCincoNumerosPrimos);

        List<Integer> siguientesCincoNumerosPrimos = new ArrayList<>();
        siguientesCincoNumerosPrimos.add(13);
        siguientesCincoNumerosPrimos.add(17);
        siguientesCincoNumerosPrimos.add(19);
        siguientesCincoNumerosPrimos.add(23);
        siguientesCincoNumerosPrimos.add(29);

        // Agregando una colección entera en un ArrayList
        primerosDiezNumerosPrimos.addAll(siguientesCincoNumerosPrimos);

        System.out.println(primerosDiezNumerosPrimos);
        
    }
}

Output:

[2, 3, 5, 7, 11, 13, 17, 19, 23, 29]

Ejemplo: https://www.online-ide.com/C2dTHOstkh

Accediendo a elementos de un ArrayList

Este ejemplo muestra:

  • Cómo validar si un ArrayList está vacío usando el método isEmpty().
  • Cómo encontrar el tamaño de un ArrayList usando el método size().
  • Cómo acceder al elemento en un índice particular en un ArrayList usando el método get().
  • Cómo modificar el elemento en un índice particular en un ArrayList usando el método set().
import java.util.ArrayList;
import java.util.List;

public class AccederElementosArrayList {
    
    public static void main(String[] args) {
        
        List<String> empresas = new ArrayList<>();

        // Valida si el ArrayList está vacío
        System.out.println("¿Está vacía la lista de empresas? : " + empresas.isEmpty());

        empresas.add("Google");
        empresas.add("Apple");
        empresas.add("Microsoft");
        empresas.add("Amazon");
        empresas.add("Facebook");

        // Encuentra el tamaño de un ArrayList
        System.out.println("Aquí hay " + empresas.size() + " empresas.");
        System.out.println(empresas);

        // Recupera el elemento de un índice determinado
        String empresaUno = empresas.get(0);
        String empresaDos = empresas.get(1);
        String ultimaEmpresa = empresas.get(empresas.size() - 1);

        System.out.println("Empresa Uno: " + empresaUno);
        System.out.println("Empresa Dos: " + empresaDos);
        System.out.println("Ultima Empresas de la lista: " + ultimaEmpresa);

        // Modifica un elemento en un indice determinado
        empresas.set(4, "Walmart");
        
        System.out.println("Se modifica lista de empresas: " + empresas);
    }
}

Output:

¿Está vacía la lista de empresas? : true
Aquí hay 5 empresas.
[Google, Apple, Microsoft, Amazon, Facebook]
Empresa Uno: Google
Empresa Dos: Apple
Ultima Empresas de la lista: Facebook
Se modifica lista de empresas: [Google, Apple, Microsoft, Amazon, Walmart]

Ejemplo: https://www.online-ide.com/M4jqBWZ6in

4. Eliminando elementos de un ArrayList

Este ejemplo muestra:

  • Cómo eliminar el elemento en un índice dado en un ArrayList | remove(int index)
  • Cómo eliminar un elemento de un ArrayList | remove(Object o)
  • Cómo eliminar todos los elementos de un ArrayList que existen en una colección determinada | removeAll()
  • Cómo eliminar todos los elementos que coinciden con un predicado dado | removeIf()
  • Cómo borrar un ArrayList | clear()
import java.util.ArrayList;
import java.util.List;
import java.util.function.Predicate;

public class RemoverElementosDeArrayList {
    public static void main(String[] args) {
        
        List<String> lenguajesProgramacion = new ArrayList<>();
        
        lenguajesProgramacion.add("C");
        lenguajesProgramacion.add("C++");
        lenguajesProgramacion.add("Java");
        lenguajesProgramacion.add("Kotlin");
        lenguajesProgramacion.add("Python");
        lenguajesProgramacion.add("Perl");
        lenguajesProgramacion.add("Ruby");

        System.out.println("Inicializa List: " + lenguajesProgramacion);

        // Eliminar el elemento del indice `5`
        lenguajesProgramacion.remove(5);
        System.out.println("Después de remove(5): " + lenguajesProgramacion);

        // Eliminar la primera ocurrencia del elemento dado de la ArrayList
        // (El metodo remove() devuelve false si el elemento no existe en el ArrayList)
        boolean isRemoved = lenguajesProgramacion.remove("Kotlin");
        System.out.println("Después de remove(\"Kotlin\"): " + lenguajesProgramacion);

        // Elimina todos los elementos que existan en una colección determinada.
        List<String> lenguajesScript = new ArrayList<>();
        lenguajesScript.add("Python");
        lenguajesScript.add("Ruby");
        lenguajesScript.add("Perl");

        lenguajesProgramacion.removeAll(lenguajesScript);
        System.out.println("Después de removeAll(lenguajesScript): " + lenguajesProgramacion);

        // Eliminar todos los elementos que satisfacen el predicado dado
        lenguajesProgramacion.removeIf(new Predicate<String>() {
            @Override
            public boolean test(String s) {
                return s.startsWith("C");
            }
        });

        /*
            La llamada removeIf() anterior también puede escribirse utilizando una expresión lambda como la siguiente -
            lenguajesProgramacion.removeIf(s -> s.startsWith("C"))
        */

        System.out.println("Después de eliminar todos los elementos que empiezan con \"C\": " + lenguajesProgramacion);

        // Elimina todos los elementos del ArrayList
        lenguajesProgramacion.clear();
        System.out.println("Después de clear(): " + lenguajesProgramacion);
    }
}

Output:

Inicializa List: [C, C++, Java, Kotlin, Python, Perl, Ruby]
Después de remove(5): [C, C++, Java, Kotlin, Python, Ruby]
Después de remove("Kotlin"): [C, C++, Java, Python, Ruby]
Después de removeAll(lenguajesScript): [C, C++, Java]
Después de eliminar todos los elementos que empiezan con "C": [Java]
Después de clear(): []

Ejemplo: https://www.online-ide.com/oZqOiBt3vL

5. Iterando sobre un ArrayList

El siguiente ejemplo muestra como iterar sobre un ArrayList usando:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;

public class IterandoSoobreArrayList {
    
    public static void main(String[] args) {
        List<String> series = new ArrayList<>();
        series.add("Breaking Bad");
        series.add("Game Of Thrones");
        series.add("Friends");
        series.add("Prison break");

        System.out.println("=== Iterando usando Java 8 forEach y expresión lambda ===");
        series.forEach(serie -> {
            System.out.println(serie);
        });

        System.out.println("\n=== Iterando usando iterator() ===");
        Iterator<String> seriesIterator = series.iterator();
        while (seriesIterator.hasNext()) {
            String serie = seriesIterator.next();
            System.out.println(serie);
        }

        System.out.println("\n=== Iterando usando iterator() y Java 8 con el método forEachRemaining() ===");
        seriesIterator = series.iterator();
        seriesIterator.forEachRemaining(serie -> {
            System.out.println(serie);
        });

        System.out.println("\n=== Iterando usando listIterator() para recorrer en ambas direcciones ===");
        ListIterator<String> seriesListIterator = series.listIterator(series.size());
        while (seriesListIterator.hasPrevious()) {
            String serie = seriesListIterator.previous();
            System.out.println(serie);
        }

        System.out.println("\n=== Iterando usando un simple bucle for-each ===");
        for(String serie: series) {
            System.out.println(serie);
        }

        System.out.println("\n=== Iterando usando un bucle for con índice ===");
        for(int i = 0; i < series.size(); i++) {
            System.out.println(series.get(i));
        }
    }
}

Output:

=== Iterando usando Java 8 forEach y expresión lambda ===
Breaking Bad
Game Of Thrones
Friends
Prison break

=== Iterando usando iterator() ===
Breaking Bad
Game Of Thrones
Friends
Prison break

=== Iterando usando iterator() y Java 8 con el método forEachRemaining() ===
Breaking Bad
Game Of Thrones
Friends
Prison break

=== Iterando usando listIterator() para recorrer en ambas direcciones ===
Prison break
Friends
Game Of Thrones
Breaking Bad

=== Iterando usando un simple bucle for-each ===
Breaking Bad
Game Of Thrones
Friends
Prison break

=== Iterando usando un bucle for con índice ===
Breaking Bad
Game Of Thrones
Friends
Prison break

Ejemplo: https://www.online-ide.com/fEMxogiwVc

Los métodos iterator() y listIterator() son útiles cuando se necesita modificar el ArrayList mientras se recorre.

Considera el siguiente ejemplo, donde se eliminan elementos del ArrayList usando el método iterator.remove() mientras se recorre.

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class ArrayListIteratorRemove {
    public static void main(String[] args) {
        List<Integer> numeros = new ArrayList<>();
        numeros.add(13);
        numeros.add(18);
        numeros.add(25);
        numeros.add(40);

        Iterator<Integer> iterator = numeros.iterator();
        while (iterator.hasNext()) {
            Integer num = iterator.next();
            if(num % 2 != 0) {
                iterator.remove();
            }
        }

        System.out.println(numeros);
    }
}

Output:

[18, 40]

Ejemplo: https://www.online-ide.com/ODpl1VhRi9

6. Buscando elementos en un ArrayList

  • Comprobar si una ArrayList contiene un elemento dado | contains()
  • Encontrar el índice de la primera aparición de un elemento en una ArrayList | indexOf()
  • Encontrar el índice de la última aparición de un elemento en un ArrayList | lastIndexOf()
import java.util.ArrayList;
import java.util.List;

public class BuscaElementosEnArrayList {
	
    public static void main(String[] args) {
		
        List<String> names = new ArrayList<>();
		
        names.add("John");
        names.add("Alice");
        names.add("Bob");
        names.add("Steve");
        names.add("John");
        names.add("Steve");
        names.add("Maria");

        // Valida si el ArrayList contiene el elemento dado
        System.out.println("La lista de nombres contiene \"Bob\"? : " + names.contains("Bob"));

        // Busca el indice de la primera aparicion de un elemento en un ArrayList
        System.out.println("indexOf \"Steve\": " + names.indexOf("Steve"));
        System.out.println("indexOf \"Mark\": " + names.indexOf("Mark"));

        // Busca el indice de la ultima aparicion de un elemento en un ArrayList
        System.out.println("lastIndexOf \"John\" : " + names.lastIndexOf("John"));
        System.out.println("lastIndexOf \"Bill\" : " + names.lastIndexOf("Bill"));
		
    }
	
}

Output:

La lista de nombres contiene "Bob"? : true
indexOf "Steve": 3
indexOf "Mark": -1
lastIndexOf "John" : 4
lastIndexOf "Bill" : -1

Ejemplo: https://www.online-ide.com/F0A84tBy9q