La lista enlazada es parte de la Marco de colección presente en el paquete java.util. Esta clase es una implementación de la estructura de datos de lista doblemente enlazada.
La principal diferencia entre una lista enlazada normal y una lista doblemente enlazada es que una lista doblemente enlazada contiene un puntero adicional, normalmente llamado puntero anterior, junto con el siguiente puntero y los datos que se encuentran en la lista enlazada individualmente.
Constructores en LinkedList:
Para crear una LinkedList, necesitamos crear un objeto de la clase LinkedList. La clase LinkedList consta de varios constructores que permiten la posible creación de la lista. Los siguientes son los constructores disponibles en esta clase:
1. Lista enlazada(): Este constructor se utiliza para crear una lista enlazada vacía. Si deseamos crear una LinkedList vacía con el nombre ll, entonces se puede crear como:
ListaEnlazada ll = nueva ListaEnlazada();
2. Lista vinculada (Colección C): Este constructor se utiliza para crear una lista ordenada que contiene todos los elementos de una colección especificada, tal como los devuelve el iterador de la colección. Si deseamos crear una LinkedList con el nombre ll, entonces se puede crear como:
ListaEnlazada ll = nueva ListaEnlazada(C);
Métodos para Java LinkedList:
| Método | Descripción |
|---|---|
| agregar (índice int, elemento E) | Este método inserta el elemento especificado en la posición especificada en esta lista. |
| agregar(Y y) | Este método agrega el elemento especificado al final de esta lista. |
| addAll(índice int, Colección c) | Este método inserta todos los elementos de la colección especificada en esta lista, comenzando en la posición especificada. |
| agregarTodo(Colección c) | Este método agrega todos los elementos de la colección especificada al final de esta lista, en el orden en que los devuelve el iterador de la colección especificada. |
| agregarPrimero(E e) | Este método inserta el elemento especificado al principio de esta lista. |
| agregarÚltimo(E e) | Este método agrega el elemento especificado al final de esta lista. |
| claro() | Este método elimina todos los elementos de esta lista. |
| clon() | Este método devuelve una copia superficial de esta LinkedList. |
| contiene(Objeto o) | Este método devuelve verdadero si esta lista contiene el elemento especificado. |
| Iterador descendente() | Este método devuelve un iterador sobre los elementos de este deque en orden secuencial inverso. |
| elemento() | Este método recupera, pero no elimina, el encabezado (primer elemento) de esta lista. |
| obtener (índice int) | Este método devuelve el elemento en la posición especificada en esta lista. |
| obtenerPrimero() | Este método devuelve el primer elemento de esta lista. |
| obtener ultimo() | Este método devuelve el último elemento de esta lista. |
| índice de (objeto o) | Este método devuelve el índice de la primera aparición del elemento especificado en esta lista, o -1 si esta lista no contiene el elemento. |
| último índice de (objeto o) | Este método devuelve el índice de la última aparición del elemento especificado en esta lista, o -1 si esta lista no contiene el elemento. |
| listaIterator(índice int) | Este método devuelve un iterador de lista de los elementos de esta lista (en la secuencia adecuada), comenzando en la posición especificada en la lista. |
| oferta(E e) | Este método agrega el elemento especificado como cola (último elemento) de esta lista. |
| ofertaPrimera(E y) | Este método inserta el elemento especificado al principio de esta lista. |
| ofertaÚltima(E e) | Este método inserta el elemento especificado al final de esta lista. |
| ojeada() | Este método recupera, pero no elimina, el encabezado (primer elemento) de esta lista. |
| mirar primero() | Este método recupera, pero no elimina, el primer elemento de esta lista o devuelve nulo si esta lista está vacía. |
| mirarÚltimo() | Este método recupera, pero no elimina, el último elemento de esta lista o devuelve nulo si esta lista está vacía. |
| encuesta() | Este método recupera y elimina el encabezado (primer elemento) de esta lista. |
| encuestaPrimera() | Este método recupera y elimina el primer elemento de esta lista, o devuelve nulo si esta lista está vacía. |
| encuestaÚltimo() | Este método recupera y elimina el último elemento de esta lista, o devuelve nulo si esta lista está vacía. |
| estallido() | Este método extrae un elemento de la pila representada por esta lista. |
| empujar (E y) | Este método coloca un elemento en la pila representada por esta lista. |
| eliminar() | Este método recupera y elimina el encabezado (primer elemento) de esta lista. |
| eliminar (índice int) | Este método elimina el elemento en la posición especificada en esta lista. |
| eliminar (Objeto o) | Este método elimina la primera aparición del elemento especificado de esta lista si está presente. |
| eliminarPrimero() | Este método elimina y devuelve el primer elemento de esta lista. |
| eliminarPrimeraOcurrencia(Objeto o) | Este método elimina la primera aparición del elemento especificado en esta lista (al recorrer la lista del principio al final). |
| eliminarÚltimo() | Este método elimina y devuelve el último elemento de esta lista. |
| eliminarÚltimaOcurrencia(Objeto o) | Este método elimina la última aparición del elemento especificado en esta lista (al recorrer la lista de principio a fin). |
| conjunto (índice int, elemento E) | Este método reemplaza el elemento en la posición especificada en esta lista con el elemento especificado. |
| tamaño() | Este método devuelve el número de elementos de esta lista. |
| divisor() | Este método crea un Spliterator de enlace tardío y de falla rápida sobre los elementos de esta lista. |
| a matriz() | Este método devuelve una matriz que contiene todos los elementos de esta lista en la secuencia adecuada (del primero al último elemento). |
| aArray(T[] a) | Este método devuelve una matriz que contiene todos los elementos de esta lista en la secuencia adecuada (del primero al último elemento); el tipo de tiempo de ejecución de la matriz devuelta es el de la matriz especificada. |
| Encadenar() | Este método devuelve una cadena que contiene todos los elementos de esta lista en la secuencia adecuada (del primero al último elemento), cada elemento está separado por comas y la cadena está entre corchetes. |
A continuación se muestra la implementación de las operaciones anteriores:
Java
// Java Program to Demonstrate> // Implementation of LinkedList> // class> > // Importing required classes> import> java.util.*;> > // Main class> public> class> GFG {> > >// Driver code> >public> static> void> main(String args[])> >{> >// Creating object of the> >// class linked list> >LinkedList ll =>new> LinkedList();> > >// Adding elements to the linked list> >ll.add(>'A'>);> >ll.add(>'B'>);> >ll.addLast(>'C'>);> >ll.addFirst(>'D'>);> >ll.add(>2>,>'E'>);> > >System.out.println(ll);> > >ll.remove(>'B'>);> >ll.remove(>3>);> >ll.removeFirst();> >ll.removeLast();> > >System.out.println(ll);> >}> }> |
>
>Producción
[D, A, E, B, C] [A]>

En la ilustración anterior, AbstractList, CopyOnWriteArrayList y AbstractSequentialList son las clases que implementan la interfaz de lista. Se implementa una funcionalidad separada en cada una de las clases mencionadas. Ellos son:
- AbstractList: esta clase se utiliza para implementar una lista no modificable, para lo cual solo es necesario extender esta clase AbstractList e implementar solo los métodos get() y size(). CopyOnWriteArrayList: esta clase implementa la interfaz de lista. Es una versión mejorada de ArrayList en la que todas las modificaciones (agregar, configurar, eliminar, etc.) se implementan haciendo una copia nueva de la lista.
Realizar varias operaciones en LinkedList:
- Agregar elementos
- Actualizando elementos
- Eliminando elementos
- Iterando sobre elementos
- A matriz();
- Tamaño();
- eliminar primero();
- eliminar el último();
Operación 1: Agregar elementos
Para agregar un elemento a un ArrayList, podemos usar el método add(). Este método está sobrecargado para realizar múltiples operaciones basadas en diferentes parámetros. Ellos son:
- add(Object): este método se utiliza para agregar un elemento al final de LinkedList. add(int index, Object): este método se utiliza para agregar un elemento en un índice específico en LinkedList.
A continuación se muestra la implementación de la operación anterior:
Java
// Java program to add elements> // to a LinkedList> > import> java.util.*;> > public> class> GFG {> > >public> static> void> main(String args[])> >{> >LinkedList ll =>new> LinkedList();> > >ll.add(>'Geeks'>);> >ll.add(>'Geeks'>);> >ll.add(>1>,>'For'>);> > >System.out.println(ll);> >}> }> |
>
>Producción
[Geeks, For, Geeks]>
Operación 2: Elementos cambiantes
Después de agregar los elementos, si deseamos cambiar el elemento, podemos hacerlo usando el método set(). Dado que una LinkedList está indexada, el índice del elemento hace referencia al elemento que deseamos cambiar. Por lo tanto, este método toma un índice y el elemento actualizado que debe insertarse en ese índice.
A continuación se muestra la implementación de la operación anterior:
Java
// Java program to change elements> // in a LinkedList> > import> java.util.*;> > public> class> GFG {> > >public> static> void> main(String args[])> >{> >LinkedList ll =>new> LinkedList();> > >ll.add(>'Geeks'>);> >ll.add(>'Geeks'>);> >ll.add(>1>,>'Geeks'>);> > >System.out.println(>'Initial LinkedList '> + ll);> > >ll.set(>1>,>'For'>);> > >System.out.println(>'Updated LinkedList '> + ll);> >}> }> |
comentario de powershell multilínea
>
>Producción
Initial LinkedList [Geeks, Geeks, Geeks] Updated LinkedList [Geeks, For, Geeks]>
Operación 3: Eliminando elementos
Para eliminar un elemento de una LinkedList, podemos usar el método remove(). Este método está sobrecargado para realizar múltiples operaciones basadas en diferentes parámetros. Ellos son:
- eliminar (Objeto): este método se utiliza para simplemente eliminar un objeto de LinkedList. Si hay varios objetos de este tipo, se elimina la primera aparición del objeto. remove(int index): Dado que una LinkedList está indexada, este método toma un valor entero que simplemente elimina el elemento presente en ese índice específico en LinkedList. Después de eliminar el elemento y los índices de los elementos se actualizan, el objeto de LinkedList se actualiza dando una nueva Lista después de la eliminación de los elementos.
A continuación se muestra la implementación de la operación anterior:
Java
// Java program to remove elements> // in a LinkedList> > import> java.util.*;> > public> class> GFG {> > >public> static> void> main(String args[])> >{> >LinkedList ll =>new> LinkedList();> > >ll.add(>'Geeks'>);> >ll.add(>'Geeks'>);> >ll.add(>1>,>'For'>);> > >System.out.println(>'Initial LinkedList '> + ll);> > >// Function call> >ll.remove(>1>);> > >System.out.println(>'After the Index Removal '> + ll);> > >ll.remove(>'Geeks'>);> > >System.out.println(>'After the Object Removal '> >+ ll);> >}> }> |
>
>Producción
Initial LinkedList [Geeks, For, Geeks] After the Index Removal [Geeks, Geeks] After the Object Removal [Geeks]>
Operación 4: iteración de LinkedList
Hay varias formas de iterar a través de LinkedList. Las formas más famosas son mediante el uso del bucle for básico en combinación con un método get() para obtener el elemento en un índice específico y el bucle for avanzado.
A continuación se muestra la implementación de la operación anterior:
Java
// Java program to iterate the elements> // in an LinkedList> > import> java.util.*;> > public> class> GFG {> > >public> static> void> main(String args[])> >{> >LinkedList ll> >=>new> LinkedList();> > >ll.add(>'Geeks'>);> >ll.add(>'Geeks'>);> >ll.add(>1>,>'For'>);> > >// Using the Get method and the> >// for loop> >for> (>int> i =>0>; i System.out.print(ll.get(i) + ' '); } System.out.println(); // Using the for each loop for (String str : ll) System.out.print(str + ' '); } }> |
>
>Producción
Geeks For Geeks Geeks For Geeks>
Operación 4: Lista vinculada a To Array usando toArray();
Java
número de armstrong
import> java.util.*;> public> class> GFG2 {> >public> static> void> main(String[] args)> >{> >LinkedList list=>new> LinkedList();> >list.add(>123>);> >list.add(>12>);> >list.add(>11>);> >list.add(>1134>);> >System.out.println(>'LinkedList: '>+ list);> >Object[] a = list.toArray();> >System.out.print(>'After converted LinkedList to Array: '>);> >for>(Object element : a)> >System.out.print(element+>' '>);> >}> }> |
>
>Producción
LinkedList: [123, 12, 11, 1134] After converted LinkedList to Array: 123 12 11 1134>
Operación 5 tamaños();
Java
import> java.io.*;> import> java.util.LinkedList;> public> class> GFG2 {> >public> static> void> main(String args[]) {> >LinkedList list =>new> LinkedList();> >list.add(>'Geeks for Geeks '>);> >list.add(>'is best '>);> >// Displaying the size of the list> >System.out.println(>'The size of the linked list is: '> + list.size());> >}> }> |
>
>Producción
The size of the linked list is: 2>
Operación 7 – eliminarPrimero();
Java
import> java.io.*;> import> java.util.LinkedList;> public> class> GFG2 {> >public> static> void> main(String args[]) {> > >LinkedList list =>new> LinkedList();> >list.add(>10>);> >list.add(>20>);> >list.add(>30>);> >System.out.println(>'LinkedList:'> + list);> >System.out.println(>'The remove first element is: '> + list.removeFirst());> >// Displaying the final list> >System.out.println(>'Final LinkedList:'> + list);> >}> }> |
>
>Producción
LinkedList:[10, 20, 30] The remove first element is: 10 Final LinkedList:[20, 30]>
Operación 8- eliminar el último();
Java
¿Qué tan grande es la pantalla de mi computadora?
import> java.io.*;> import> java.util.LinkedList;> public> class> GFG2 {> >public> static> void> main(String args[])> >{> > >LinkedList list =>new> LinkedList();> >list.add(>10>);> >list.add(>20>);> >list.add(>30>);> >System.out.println(>'LinkedList:'> + list);> >// Remove the tail using removeLast()> >System.out.println(>'The last element is removed: '> + list.removeLast());> >// Displaying the final list> >System.out.println(>'Final LinkedList:'> + list);> >// Remove the tail using removeLast()> >System.out.println(>'The last element is removed: '> + list.removeLast());> >// Displaying the final list> >System.out.println(>'Final LinkedList:'> + list);> >}> }> |
>
>Producción
LinkedList:[10, 20, 30] The last element is removed: 30 Final LinkedList:[10, 20] The last element is removed: 20 Final LinkedList:[10]>
La clase LinkedList en Java es parte del marco de colecciones de Java y proporciona una implementación de lista vinculada de la interfaz List. Permite el almacenamiento y recuperación de elementos en una estructura de datos de lista doblemente vinculada, donde cada elemento está vinculado a sus elementos predecesores y sucesores.
Aquí hay un ejemplo simple que demuestra cómo usar una LinkedList en Java:
Java
import> java.util.LinkedList;> > public> class> LinkedListExample {> >public> static> void> main(String[] args) {> >// Create a new linked list> >LinkedList linkedList =>new> LinkedList();> > >// Add elements to the linked list> >linkedList.add(>1>);> >linkedList.add(>2>);> >linkedList.add(>3>);> > >// Add an element to the beginning of the linked list> >linkedList.addFirst(>0>);> > >// Add an element to the end of the linked list> >linkedList.addLast(>4>);> > >// Print the elements of the linked list> >for> (>int> i : linkedList) {> >System.out.println(i);> >}> >}> }> |
>
>Producción
0 1 2 3 4>
Ventajas de usar LinkedList en Java:
- Tamaño dinámico: al igual que con Vector, el tamaño de una LinkedList puede crecer o reducirse dinámicamente, por lo que no tiene que preocuparse por establecer un tamaño inicial.
- Inserciones y eliminaciones eficientes: LinkedList es una estructura de datos eficiente para insertar o eliminar elementos en el medio de la lista porque solo necesita cambiar los enlaces entre elementos, en lugar de desplazar todos los elementos después del punto de inserción o eliminación.
- Iteración flexible: con una lista vinculada, puede iterar eficientemente a través de la lista en cualquier dirección, ya que cada elemento tiene una referencia tanto a su elemento predecesor como a su sucesor.
Desventajas de usar LinkedList en Java:
- Rendimiento: LinkedList tiene un rendimiento más lento que ArrayList cuando se trata de acceder a elementos individuales. Esto se debe a que necesita recorrer la lista para llegar al elemento deseado, mientras que con ArrayList, simplemente puede acceder al elemento deseado utilizando un índice.
- Sobrecarga de memoria: LinkedList requiere más memoria que ArrayList porque cada elemento requiere memoria adicional para los enlaces a sus elementos predecesores y sucesores.
Libro de referencia:
Un buen libro de referencia para aprender sobre Java Collections Framework y LinkedList es Java Collections de Naftalin y Wadler. Este libro proporciona una visión integral del marco de las colecciones de Java, incluido LinkedList, e incluye muchos ejemplos y ejercicios para ayudarlo a comprender cómo usar estas clases de manera efectiva.