Método add() de 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");
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
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);
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
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ónoffer(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]
// 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());
}
// 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]
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
- Seguridad de hilos: LinkedList no es seguro para hilos; en entornos multiproceso se requiere sincronización externa
- Elementos nulos: Permite agregar elementos null
- Verificación de índice: Al usar el método add con índice, preste atención a las condiciones de límite
- Modificación concurrente: Modificar la lista mientras se usa un iterador lanza ConcurrentModificationException
Java LinkedList