Java LinkedList
Una lista enlazada (Linked list) es una estructura de datos básica común, es una tabla lineal, pero no almacena los datos en orden lineal, sino que en cada nodo almacena la dirección del siguiente nodo.
Las listas enlazadas se pueden dividir en listas enlazadas simples y listas enlazadas dobles.
Una lista enlazada simple contiene dos valores: el valor del nodo actual y un enlace que apunta al siguiente nodo.

Una lista enlazada doble tiene tres valores enteros: el valor, el enlace al nodo anterior y el enlace al nodo siguiente.

Java LinkedList (lista enlazada) es similar a ArrayList y es un contenedor de datos de uso común.
En comparación con ArrayList, LinkedList es más eficiente en las operaciones de agregar y eliminar, pero menos eficiente en las operaciones de buscar y modificar.
Utilice ArrayList en los siguientes casos:
- Acceder con frecuencia a un elemento específico de la lista.
- Solo necesita agregar y eliminar elementos al final de la lista.
Utilice LinkedList en los siguientes casos:
- Necesita acceder a ciertos elementos de la lista mediante iteración con bucles.
- Necesita agregar y eliminar elementos con frecuencia al principio, en el medio o al final de la lista.
LinkedList hereda de la clase AbstractSequentialList.
LinkedList implementa la interfaz Queue y puede usarse como cola.
LinkedList implementa la interfaz List y puede realizar operaciones relacionadas con listas.
LinkedList implementa la interfaz Deque y puede usarse como cola.
LinkedList implementa la interfaz Cloneable, lo que permite la clonación.
LinkedList implementa la interfaz java.io.Serializable, lo que admite la serialización y permite la transmisión mediante serialización.

La clase LinkedList se encuentra en el paquete java.util. Antes de usarla, debe importarse. La sintaxis es la siguiente:
// 引入 LinkedList 类 import java.util.LinkedList; LinkedList<E> list = new LinkedList<E>(); // 普通创建方法 或者 LinkedList<E> list = new LinkedList(Collection<? extends E> c); // 使用集合创建链表
Cree un ejemplo sencillo de lista enlazada:
Ejemplo
import java.util.LinkedList;
public class EjemploTest {
public static void main(String[] args) {
LinkedList<String> sites = new LinkedList<String>();
sites.add("Google");
sites.add("Ejemplo");
sites.add("Taobao");
sites.add("Weibo");
System.out.println(sites);
}
}
El resultado de ejecutar el ejemplo anterior es:
[Google, Ejemplo, Taobao, Weibo]
En la mayoría de los casos, usar ArrayList para acceder a elementos aleatorios de la lista es más eficiente, pero en las siguientes situaciones LinkedList proporciona métodos más eficientes.
Agregar elementos al principio de la lista:
Ejemplo
import java.util.LinkedList;
public class EjemploTest {
public static void main(String[] args) {
LinkedList<String> sites = new LinkedList<String>();
sites.add("Google");
sites.add("Ejemplo");
sites.add("Taobao");
// Usar addFirst() para agregar elementos al principio
sites.addFirst("Wiki");
System.out.println(sites);
}
}
El resultado de ejecutar el ejemplo anterior es:
[Wiki, Google, Ejemplo, Taobao]
Agregar elementos al final de la lista:
Ejemplo
import java.util.LinkedList;
public class EjemploTest {
public static void main(String[] args) {
LinkedList<String> sites = new LinkedList<String>();
sites.add("Google");
sites.add("Ejemplo");
sites.add("Taobao");
// Usar addLast() para agregar elementos al final
sites.addLast("Wiki");
System.out.println(sites);
}
}
El resultado de ejecutar el ejemplo anterior es:
[Google, Ejemplo, Taobao, Wiki]
Eliminar elementos del principio de la lista:
Ejemplo
import java.util.LinkedList;
public class EjemploTest {
public static void main(String[] args) {
LinkedList<String> sites = new LinkedList<String>();
sites.add("Google");
sites.add("Ejemplo");
sites.add("Taobao");
sites.add("Weibo");
// Usar removeFirst() para eliminar el primer elemento
sites.removeFirst();
System.out.println(sites);
}
}
El resultado de ejecutar el ejemplo anterior es:
[Ejemplo, Taobao, Weibo]
Eliminar elementos del final de la lista:
Ejemplo
import java.util.LinkedList;
public class EjemploTest {
public static void main(String[] args) {
LinkedList<String> sites = new LinkedList<String>();
sites.add("Google");
sites.add("Ejemplo");
sites.add("Taobao");
sites.add("Weibo");
// Usar removeLast() para eliminar el último elemento
sites.removeLast();
System.out.println(sites);
}
}
El resultado de ejecutar el ejemplo anterior es:
[Google, Ejemplo, Taobao]
Obtener el elemento al principio de la lista:
Ejemplo
import java.util.LinkedList;
public class EjemploTest {
public static void main(String[] args) {
LinkedList<String> sites = new LinkedList<String>();
sites.add("Google");
sites.add("Ejemplo");
sites.add("Taobao");
sites.add("Weibo");
// Usar getFirst() para obtener el primer elemento
System.out.println(sites.getFirst());
}
}
El resultado de ejecutar el ejemplo anterior es:
Obtener el elemento al final de la lista:
Ejemplo
import java.util.LinkedList;
public class EjemploTest {
public static void main(String[] args) {
LinkedList<String> sites = new LinkedList<String>();
sites.add("Google");
sites.add("Ejemplo");
sites.add("Taobao");
sites.add("Weibo");
// Usar getLast() para obtener el último elemento
System.out.println(sites.getLast());
}
}
El resultado de ejecutar el ejemplo anterior es:
Iterar elementos
Podemos usar for junto con el método size() para iterar los elementos de la lista:
Ejemplo
import java.util.LinkedList;
public class EjemploTest {
public static void main(String[] args) {
LinkedList<String> sites = new LinkedList<String>();
sites.add("Google");
sites.add("Ejemplo");
sites.add("Taobao");
sites.add("Weibo");
for (int size = sites.size(), i = 0; i < size; i++) {
System.out.println(sites.get(i));
}
}
}
El método size() se utiliza para calcular el tamaño de la lista enlazada.
El resultado de ejecutar el ejemplo anterior es:
Google Ejemplo Taobao Weibo
También se puede usar for-each para iterar los elementos:
Ejemplo
import java.util.LinkedList;
public class EjemploTest {
public static void main(String[] args) {
LinkedList<String> sites = new LinkedList<String>();
sites.add("Google");
sites.add("Ejemplo");
sites.add("Taobao");
sites.add("Weibo");
for (String i : sites) {
System.out.println(i);
}
}
}
El resultado de ejecutar el ejemplo anterior es:
Google Ejemplo Taobao Weibo
Métodos comunes
| Método | Descripción |
|---|---|
| public boolean add(E e) | Agrega un elemento al final de la lista enlazada, devuelve si tuvo éxito; true si es correcto, false si falla. |
| public void add(int index, E element) | Inserta un elemento en la posición especificada. |
| public boolean addAll(Collection extends E> c) | Agrega todos los elementos de una colección al final de la lista enlazada, devuelve si tuvo éxito; true si es correcto, false si falla. |
| public boolean addAll(int index, Collection extends E> c) | Agrega todos los elementos de una colección después de la posición especificada de la lista enlazada, devuelve si tuvo éxito; true si es correcto, false si falla. |
| public void addFirst(E e) | Agrega un elemento al principio. |
| public void addLast(E e) | Agrega un elemento al final. |
| public boolean offer(E e) | Agrega un elemento al final de la lista enlazada, devuelve si tuvo éxito; true si es correcto, false si falla. |
| public boolean offerFirst(E e) | Inserta un elemento al principio, devuelve si tuvo éxito; true si es correcto, false si falla. |
| public boolean offerLast(E e) | Inserta un elemento al final, devuelve si tuvo éxito; true si es correcto, false si falla. |
| public void clear() | Vacía la lista enlazada. |
| public E removeFirst() | Elimina y devuelve el primer elemento. |
| public E removeLast() | Elimina y devuelve el último elemento. |
| public boolean remove(Object o) | Elimina un elemento, devuelve si tuvo éxito; true si es correcto, false si falla. |
| public E remove(int index) | Elimina el elemento en la posición especificada. |
| public E poll() | Elimina y devuelve el primer elemento. |
| public E remove() | Elimina y devuelve el primer elemento. |
| public boolean contains(Object o)</td> | Determina si contiene un elemento. |
| public E get(int index) | Devuelve el elemento en la posición especificada. |
| public E getFirst() | Devuelve el primer elemento. |
| public E getLast() | Devuelve el último elemento. |
| public int indexOf(Object o) | Busca el índice de la primera aparición del elemento especificado de adelante hacia atrás. |
| public int lastIndexOf(Object o) | Busca el índice de la última aparición del elemento especificado. |
| public E peek() | Devuelve el primer elemento. |
| public E element() | Devuelve el primer elemento. |
| public E peekFirst() | Devuelve el elemento del principio. |
| public E peekLast() | Devuelve el elemento del final. |
| public E set(int index, E element) | Establece el elemento en la posición especificada. |
| public Object clone() | Clona la lista. |
|
public Iterator | Devuelve un iterador en orden inverso. |
| public int size() | Devuelve el número de elementos de la lista enlazada. |
|
public ListIterator | Devuelve un iterador desde la posición especificada hasta el final. |
| public Object[] toArray() | Devuelve un array compuesto por los elementos de la lista enlazada. |
|
public | Devuelve un array con los elementos de la lista enlazada convertidos a otro tipo. |
Puede consultar más métodos de API en:https://www.example.com/manual/jdk11api/java.base/java/util/LinkedList.html
Otras extensiones
Marco de colecciones de Java