Método add() de Java LinkedList

Java LinkedList Java LinkedList


La clase LinkedList proporciona varias versiones sobrecargadas del método add() para agregar elementos a la lista.

1、boolean add(E e)

Este es el método de adición más básico; agrega el elemento especificado al final de la lista.

Ejemplo

LinkedList<String> list = new LinkedList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");

Características del método:

  • Siempre devuelve true (porque LinkedList permite elementos duplicados)
  • La complejidad temporal es O(1)
  • Equivale al método addLast()

2、void add(int index, E element)

Inserta el elemento especificado en la posición especificada de la lista.

Ejemplo

LinkedList<String> list = new LinkedList<>();
list.add("Apple");
list.add("Banana");
list.add(1, "Orange"); // Insertar en el índice 1

Características del método:

  • Si el índice es igual al tamaño de la lista, equivale a add(E e)
  • Requiere recorrer hasta la posición especificada; la complejidad temporal promedio es O(n)
  • Puede lanzar IndexOutOfBoundsException

3、boolean addAll(Collection<? extends E> c)

Agrega todos los elementos de la colección especificada al final de la lista, en el orden devuelto por su iterador.

Ejemplo

LinkedList<String> fruits = new LinkedList<>();
fruits.add("Apple");
fruits.add("Banana");

List<String> moreFruits = Arrays.asList("Orange", "Grape");
fruits.addAll(moreFruits);

Características del método:

  • Devuelve true si la lista cambió como resultado de la llamada
  • La complejidad temporal es O(m), donde m es el tamaño de la colección pasada como argumento

4、boolean addAll(int index, Collection<? extends E> c)

Inserta todos los elementos de la colección especificada en esta lista, comenzando en la posición especificada.

Ejemplo

LinkedList<String> fruits = new LinkedList<>();
fruits.add("Apple");
fruits.add("Banana");

List<String> moreFruits = Arrays.asList("Orange", "Grape");
fruits.addAll(1, moreFruits); // Insertar la colección en el índice 1

Características del método:

  • Primero debe recorrer hasta la posición especificada
  • La complejidad temporal es O(n + m), donde n es el tamaño de la lista y m es el tamaño de la colección

Comparación con otros métodos

add() vs addLast()

  • add(E e)yaddLast(E e)Totalmente equivalente
  • Ambos se usan para agregar elementos al final de la lista

add() vs offer()

  • add(E e)En una cola con capacidad limitada, puede lanzar una excepción
  • offer(E e)En una cola con capacidad limitada, devuelve false en lugar de lanzar una excepción

add() vs push()

  • push(E e)En realidad llama aaddFirst(E e)
  • Agrega el elemento al principio de la lista, no al final

Consideraciones de rendimiento

Eficiencia de las operaciones de adición

  • Agregar al final: complejidad temporal O(1)
  • Agregar al principio: complejidad temporal O(1) (usando addFirst())
  • Agregar en el medio: complejidad temporal O(n) (se requiere recorrer hasta la posición especificada)

Comparación con ArrayList

Operación LinkedList ArrayList
Agregar al final O(1) O(1) amortizado
Agregar al principio O(1) O(n)
Agregar en el medio O(n) O(n)
Acceso aleatorio O(n) O(1)

Ejemplos de aplicaciones prácticas

Crear una lista de tareas pendientes

Ejemplo

LinkedList<String> todoList = new LinkedList<>();

// Agregar tarea
todoList.add("Buy groceries");
todoList.addFirst("Check emails"); // Tarea de alta prioridad
todoList.add(1, "Call mom"); // Prioridad media

System.out.println(todoList);
// Salida: [Check emails, Call mom, Buy groceries]

Implementar una cola simple

Ejemplo

LinkedList<String> queue = new LinkedList<>();

// Operación de encolar
queue.add("First");
queue.add("Second");
queue.add("Third");

// Operación de desencolar
while(!queue.isEmpty()) {
    System.out.println(queue.removeFirst());
}

Combinar dos listas

Ejemplo

LinkedList<String> list1 = new LinkedList<>(Arrays.asList("A", "B", "C"));
LinkedList<String> list2 = new LinkedList<>(Arrays.asList("D", "E", "F"));

list1.addAll(list2);
System.out.println(list1); // Salida: [A, B, C, D, E, F]

Notas

  1. Seguridad de hilos: LinkedList no es seguro para hilos; en entornos multiproceso se requiere sincronización externa
  2. Elementos nulos: Permite agregar elementos null
  3. Verificación de índice: Al usar el método add con índice, preste atención a las condiciones de límite
  4. Modificación concurrente: Modificar la lista mientras se usa un iterador lanza ConcurrentModificationException

Java LinkedList Java LinkedList

Otras extensiones