Java LinkedList
La clase LinkedList
de Java forma parte del Marco de Colecciones de Java e implementa las interfaces List
y Deque
. Es una lista doblemente enlazada que proporciona una estructura de datos dinámica para almacenar elementos. A diferencia de las matrices, LinkedList
permite insertar y eliminar elementos de forma eficaz tanto en los extremos como en el centro de la lista.
Utilización
LinkedList
se utiliza cuando se necesitan inserciones y supresiones frecuentes. Es especialmente útil cuando no se conoce de antemano el tamaño de la lista o cuando hay que añadir o eliminar elementos en ambos extremos de la lista.
Syntax
LinkedList<Type> linkedList = new LinkedList<>();
Type
: El tipo de elementos almacenados en la lista.linkedList
: El nombre de la instanciaLinkedList
.
Ejemplos
Ejemplo 1: Operaciones básicas
import java.util.LinkedList;
public class LinkedListExample {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
// Adding elements
list.add("Apple");
list.add("Banana");
list.add("Cherry");
// Accessing elements
System.out.println("First element: " + list.getFirst());
System.out.println("Last element: " + list.getLast());
// Removing elements
list.removeFirst();
list.removeLast();
System.out.println("List after removals: " + list);
}
}
Este ejemplo demuestra operaciones básicas como añadir, acceder y eliminar elementos de un LinkedList
. Añadimos tres frutas a la lista, accedemos a los elementos primero y último, y luego los eliminamos.
Ejemplo 2: Iterar a través de una lista enlazada
import java.util.LinkedList;
import java.util.Iterator;
public class LinkedListIteration {
public static void main(String[] args) {
LinkedList<Integer> numbers = new LinkedList<>();
numbers.add(10);
numbers.add(20);
numbers.add(30);
Iterator<Integer> iterator = numbers.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
En este ejemplo, utilizamos un Iterator
para recorrer el LinkedList
de enteros. La página Iterator
proporciona una forma de acceder a cada elemento secuencialmente.
Ejemplo 3: Utilizar LinkedList como cola
import java.util.LinkedList;
import java.util.Queue;
public class LinkedListAsQueue {
public static void main(String[] args) {
Queue<String> queue = new LinkedList<>();
// Enqueue elements
queue.add("First");
queue.add("Second");
queue.add("Third");
// Dequeue elements
System.out.println("Removed: " + queue.poll());
System.out.println("Queue after removal: " + queue);
}
}
Aquí, LinkedList
se utiliza como Queue
. Los elementos se añaden con add()
y se eliminan con poll()
, demostrando el comportamiento FIFO (primero en entrar, primero en salir).
Consejos y buenas prácticas
- Cuándo utilizarlo: Utiliza
LinkedList
cuando necesites inserciones y supresiones frecuentes, especialmente al principio o al final de la lista. - Consideración del rendimiento:
LinkedList
tiene una sobrecarga mayor queArrayList
para acceder a los elementos por índice, debido a su naturaleza de acceso secuencial. - Elementos nulos:
LinkedList
permite elementosnull
, por lo que maneja posibles escenariosNullPointerException
. - Seguridad de los hilos:
LinkedList
no está sincronizado. UtilizaCollections.synchronizedList(new LinkedList<>())
para operaciones seguras. - Operaciones Deque: Utiliza
LinkedList
comoDeque
para operaciones de doble cola, comoaddFirst()
,addLast()
,removeFirst()
yremoveLast()
.