La lista enlazada es parte del marco de la colección presente en el paquete java.util . Esta clase es una implementación de la estructura de datos LinkedList, que es una estructura de datos lineal donde los elementos no se almacenan en ubicaciones contiguas y cada elemento es un objeto separado con una parte de datos y una parte de dirección. Los elementos se vinculan mediante punteros y direcciones. Cada elemento se conoce como un Node. Debido a la dinámica y facilidad de las inserciones y eliminaciones, son preferibles a los arreglos. También tiene algunas desventajas, como que no se puede acceder directamente a los Nodes, sino que debemos comenzar desde la cabeza y seguir el enlace para llegar al Node al que deseamos acceder.
¿Cómo funciona LinkedList internamente?
Dado que LinkedList actúa como una array dinámica y no tenemos que especificar el tamaño al crearla, el tamaño de la lista aumenta automáticamente cuando agregamos y eliminamos elementos dinámicamente. Y además, los elementos no se almacenan de forma continua. Por lo tanto, no hay necesidad de aumentar el tamaño. Internamente, LinkedList se implementa utilizando 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 puntero siguiente y los datos que están en la lista enlazada individualmente.
Constructores en la 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. LinkedList(): 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:
LinkedList ll = new LinkedList();
2. LinkedList (Colección C): este constructor se usa para crear una lista ordenada que contiene todos los elementos de una colección específica, tal como los devuelve el iterador de la colección. Si deseamos crear una LinkedList con el nombre ll, entonces, se puede crear como:
LinkedList ll = new LinkedList(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. |
añadir (E mi) | Este método Agrega el elemento especificado al final de esta lista. |
addAll(índice int, Colección<E> c) | Este método Inserta todos los elementos de la colección especificada en esta lista, comenzando en la posición especificada. |
addAll(Colección<E> 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. |
añadirPrimero(E e) | Este método Inserta el elemento especificado al principio de esta lista. |
añadirÚltimo(E e) | Este método Agrega el elemento especificado al final de esta lista. |
clear() | 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. |
indexOf(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. |
lastIndexOf(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. |
listIterator(í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 la cola (último elemento) de esta lista. |
ofertaPrimero(E e) | Este método Inserta el elemento especificado al principio de esta lista. |
ofertaÚltimo(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. |
mirarPrimero() | Este método recupera, pero no elimina, el primer elemento de esta lista o devuelve un valor nulo si esta lista está vacía. |
mirarÚltimo() | Este método recupera, pero no elimina, el último elemento de esta lista o devuelve un valor nulo si esta lista está vacía. |
encuesta() | Este método recupera y elimina el encabezado (primer elemento) de esta lista. |
sondearprimero() | Este método recupera y elimina el primer elemento de esta lista, o devuelve un valor nulo si esta lista está vacía. |
última encuesta() | Este método recupera y elimina el último elemento de esta lista, o devuelve un valor nulo si esta lista está vacía. |
estallido() | Este método extrae un elemento de la pila representada por esta lista. |
empujar (E e) | Este método empuja un elemento a la pila representada por esta lista. |
retirar() | 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. |
quitar(Objeto o) | Este método elimina la primera aparición del elemento especificado de esta lista si está presente. |
removeFirst() | 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 de principio a fin). |
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. |
Talla() | Este método devuelve el número de elementos en esta lista. |
divisor() | Este método crea un Spliterator de enlace tardío y rápido sobre los elementos de esta lista. |
aArray() | Este método devuelve una array 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 array que contiene todos los elementos de esta lista en la secuencia adecuada (desde el primero hasta el último elemento); el tipo de tiempo de ejecución de la array devuelta es el de la array especificada. |
Enstringr() | Este método devuelve una string que contiene todos los elementos de esta lista en la secuencia adecuada (desde el primero hasta el último elemento), cada elemento está separado por comas y la string está encerrada entre corchetes. |
Ejemplo:
Java
// Java Program to Demonstrate // Implementation of LinkedList // class // Importing required classes import java.util.*; // Main class public class GFG { // Main driver method public static void main(String args[]) { // Creating object of the // class linked list LinkedList<String> ll = new LinkedList<String>(); // 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); } }
[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. Están:
- AbstractList: esta clase se usa para implementar una lista no modificable, para lo cual solo se necesita 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, establecer, eliminar, etc.) se implementan al hacer una copia nueva de la lista.
Realización de varias operaciones en LinkedList
- Agregar elementos
- Actualización de elementos
- Quitar elementos
- Iterando sobre elementos
Veamos cómo realizar algunas operaciones básicas en LinkedList para entenderlo mejor de la siguiente manera:
Operación 1: Adición de 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. Están:
- add(Object): este método se usa para agregar un elemento al final de LinkedList.
- add(int index, Object): este método se usa para agregar un elemento en un índice específico en LinkedList.
Ejemplo:
Java
// Java program to add elements // to a LinkedList import java.util.*; public class GFG { public static void main(String args[]) { LinkedList<String> ll = new LinkedList<>(); ll.add("Geeks"); ll.add("Geeks"); ll.add(1, "For"); System.out.println(ll); } }
[Geeks, For, Geeks]
Operación 2: Elementos cambiantes
Después de agregar los elementos, si deseamos cambiar el elemento, se puede hacer usando el método set() . Dado que una LinkedList está indexada, el elemento que deseamos cambiar está referenciado por el índice del elemento. Por lo tanto, este método toma un índice y el elemento actualizado que debe insertarse en ese índice.
Ejemplo:
Java
// Java program to change elements // in a LinkedList import java.util.*; public class GFG { public static void main(String args[]) { LinkedList<String> 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); } }
Initial LinkedList [Geeks, Geeks, Geeks] Updated LinkedList [Geeks, For, Geeks]
Operación 3: Eliminación de 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. Están:
- remove(Object): este método se usa simplemente para eliminar un objeto de LinkedList. Si hay varios de estos objetos, 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 la 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.
Ejemplo:
Java
// Java program to remove elements // in a LinkedList import java.util.*; public class GFG { public static void main(String args[]) { LinkedList<String> ll = new LinkedList<>(); ll.add("Geeks"); ll.add("Geeks"); ll.add(1, "For"); System.out.println( "Initial LinkedList " + ll); ll.remove(1); System.out.println( "After the Index Removal " + ll); ll.remove("Geeks"); System.out.println( "After the Object Removal " + ll); } }
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 usar el 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.
Ejemplo:
Java
// Java program to iterate the elements // in an LinkedList import java.util.*; public class GFG { public static void main(String args[]) { LinkedList<String> 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 < ll.size(); i++) { System.out.print(ll.get(i) + " "); } System.out.println(); // Using the for each loop for (String str : ll) System.out.print(str + " "); } }
Geeks For Geeks Geeks For Geeks
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA