Java ArrayList: Cómo usar, métodos y ejemplos de ArrayList
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:
- Java 8 forEach y expresión lambda
- Iterator()
- Iterator() y Java 8 con el método forEachRemaining()
- listIterator()
- Bucle for-each
- Buble for con índice
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