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
LinkedListcuando necesites inserciones y supresiones frecuentes, especialmente al principio o al final de la lista. - Consideración del rendimiento:
LinkedListtiene una sobrecarga mayor queArrayListpara acceder a los elementos por índice, debido a su naturaleza de acceso secuencial. - Elementos nulos:
LinkedListpermite elementosnull, por lo que maneja posibles escenariosNullPointerException. - Seguridad de los hilos:
LinkedListno está sincronizado. UtilizaCollections.synchronizedList(new LinkedList<>())para operaciones seguras. - Operaciones Deque: Utiliza
LinkedListcomoDequepara operaciones de doble cola, comoaddFirst(),addLast(),removeFirst()yremoveLast().