¿Cómo crear y manipular una lista con java.util.List en Java?

| Última modificación: 27 de diciembre de 2024 | Tiempo de Lectura: 3 minutos

Pasé un momento incómodo una vez que me pidieron manejar una lista de tareas dinámicas, porque tenía que hacer que creciera, cambiara y se adaptara sobre la marcha, y yo me quedé en blanco. No sabía realmente cómo hacerlo. Los arrays presentaban limitaciones y estaba apunto de renunciar a la tarea, cuando conocí java.util.List. Gracias a esta interfaz pude crear y manipular una lista sin limitaciones ni complicaciones. Voy a explicarte qué es y cómo funciona para que también lo aproveches en tus proyectos.

java.util.List en Java qué es

¿Qué es java.util.List?

Te decía que java.util.List es una interfaz en Java, comúnmente usada para manejar colecciones de elementos ordenados. Ten en cuenta que, como es una interfaz, no se puede instanciar directamente, pero sí puedes usar clases que la implementan, como ArrayList, LinkedList, Stack y Vector.

Es algo así como estar organizando una fila de personas que entrará a un concierto. Entonces, java.util.List sería como esa fila de personas. Cada persona en la fila tiene un lugar específico, y puedes agregar más personas al final de la fila, insertar a alguien en una posición específica, o quitar a alguien de la fila.

Estas son las características de la interfaz:

  • Mantiene el orden en que se añaden los elementos.
  • Permite elementos duplicados.
  • Soporta elementos null (dependiendo de la implementación).
  • Ofrece métodos útiles como get(), set(), add(), remove() y listIterator().

¿Por qué usar java.util.List?

Desde mi experiencia te digo que te servirá mucho para:

  1. Organizar datos secuencialmente.
  2. Acceder a elementos mediante índices.
  3. Realizar operaciones comunes como búsqueda, eliminación y actualización.
  4. Elegir entre implementaciones según tus necesidades específicas.

Cómo crear una lista con java.util.List

Para crear una lista, necesitas instanciar alguna de sus clases. Por ejemplo, con ArrayList:

import java.util.*;

public class EjemploLista {
public static void main(String[] args) {
List<String> lista = new ArrayList<>(); // Crear una lista
lista.add("Java");
lista.add("Python");
lista.add("JavaScript");

System.out.println("Lista inicial: " + lista);
}
}

Mira el resultado:

Lista inicial: [Java, Python, JavaScript]

Usar tipos genéricos

Con Generics, puedes especificar el tipo de datos que almacenará tu lista:

List<Integer> numeros = new ArrayList<>();
numeros.add(10);
numeros.add(20);
System.out.println(numeros);

Esto asegura que solo se puedan añadir números enteros, ayudando a prevenir errores en tiempo de compilación.

Operaciones comunes con java.util.List

Añadir elementos

Recuerda que puedes usar el método add() para añadir elementos al final o en una posición específica:

List<String> lenguajes = new ArrayList<>();
lenguajes.add("Kotlin");
lenguajes.add(0, "Java"); // Añadir en una posición específica
System.out.println(lenguajes);

Así es el resultado:

[Java, Kotlin]

Acceder a elementos

Usa el método get() para obtener un elemento por su índice:

System.out.println("Primer elemento: " + lenguajes.get(0));

Observa el resultado:

Primer elemento: Java

Actualizar elementos

Mira cómo puedes cambiar un elemento con el método set():

lenguajes.set(1, "Scala");
System.out.println("Lista actualizada: " + lenguajes);

Este es el resultado:

Lista actualizada: [Java, Scala]

Eliminar elementos

Aquí te muestro cómo eliminar un elemento por índice o por valor:

lenguajes.remove("Java"); // Por valor
System.out.println("Después de eliminar: " + lenguajes);

Así se ve el resultado:

Después de eliminar: [Scala]

Buscar elementos

De esta manera puedes verificar si un elemento está presente con contains():

System.out.println("¿Contiene Scala? " + lenguajes.contains("Scala"));

Este es el resultado:

¿Contiene Scala? true

También puedes encontrar su índice de esta manera:

int indice = lenguajes.indexOf("Scala");
System.out.println("Índice de Scala: " + indice);

Mira el resultado:

Índice de Scala: 0

Diferencias entre implementaciones de java.util.List

Entender esto me sirvió muchísimo y quiero que también te quede claro a ti. Ten presente que, cada clase que implementa java.util.List tiene características únicas:

  • ArrayList: Es muy bueno para operaciones rápidas de acceso.
  • LinkedList: Útil para muchas inserciones y eliminaciones.
  • Stack: Diseñado para operaciones LIFO (Último en entrar, primero en salir).
  • Vector: Similar a ArrayList, pero sincronizado (menos usado hoy en día).

Ejemplo con LinkedList:

List<String> tareas = new LinkedList<>();
tareas.add("Comprar leche");
tareas.add("Estudiar Java");
System.out.println("Tareas: " + tareas);

Te muestro el resultado:

Tareas: [Comprar leche, Estudiar Java]

Cómo iterar sobre una lista

Usando un bucle for-each:

for (String tarea : tareas) {
System.out.println(tarea);
}

Usando un iterador:

Iterator<String> iterador = tareas.iterator();
while (iterador.hasNext()) {
System.out.println(iterador.next());
}

Espero que no olvides que java.util.List es bastante útil para manejar colecciones de datos en Java. Yo creo que ya quedaste preparado para enfrentar desafíos en proyectos reales, porque ya te mostré cómo usar sus métodos y ahora entiendes las diferencias entre sus implementaciones.

Apúntate a nuestro Bootcamp de Java Full Stack en KeepCoding y aprende a crear aplicaciones complejas y escalables en poco tiempo. Desde las bases hasta técnicas avanzadas, ¡te acompañaremos para que conquistes el sector IT y des un salto en tu carrera! ¿Te animas?

Posts más leídos