Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Java

Java LinkedList: Guía Completa con Ejemplos

Java LinkedList

Descubre cómo aprovechar LinkedList de Java para manipulación eficiente de datos, con ejemplos de código prácticos y mejores prácticas.

La clase LinkedList en el Framework de Colecciones de Java implementa una lista doblemente enlazada. Cada elemento, o nodo, contiene tres campos:


Creando un LinkedList en Java

Instancia un LinkedList con un tipo de elemento específico:

LinkedList<Tipo> lista = new LinkedList<>();

Ejemplos:

// Lista de enteros
LinkedList<Integer> numeros = new LinkedList<>();
// Lista de cadenas
LinkedList<String> palabras = new LinkedList<>();

Ejemplo: Crear LinkedList en Java

import java.util.LinkedList;
class Main {
    public static void main(String[] args){
        LinkedList<String> animales = new LinkedList<>();
        animales.add("Perro");
        animales.add("Gato");
        animales.add("Vaca");
        System.out.println("LinkedList: " + animales);
    }
}

Salida

LinkedList: [Perro, Gato, Vaca]

Este código demuestra un LinkedList básico llamado animales poblado con tres elementos vía add().


Cómo Funciona un LinkedList en Java

A diferencia de los arrays, los nodos están dispersos en memoria y enlazados entre sí. El diagrama siguiente ilustra tres nodos y sus conexiones.

Java LinkedList: Guía Completa con Ejemplos

Para más detalles, consulta el artículo Linked List.


Métodos Clave de LinkedList

A continuación se muestran las operaciones más usadas:


1. Añadiendo Elementos

Usa add() para añadir un nodo, opcionalmente especificando un índice:

import java.util.LinkedList;
class Main {
    public static void main(String[] args){
        LinkedList<String> animales = new LinkedList<>();
        animales.add("Perro");
        animales.add("Gato");
        animales.add("Vaca");
        System.out.println("LinkedList: " + animales);
        animales.add(1, "Caballo");
        System.out.println("LinkedList Actualizado: " + animales);
    }
}

Salida

LinkedList: [Perro, Gato, Vaca] LinkedList Actualizado: [Perro, Caballo, Gato, Vaca]

El segundo add() inserta "Caballo" en el índice 1, desplazando los elementos subsiguientes.


2. Accediendo a Elementos

Recupera un elemento por índice con get():

import java.util.LinkedList;
class Main {
    public static void main(String[] args){
        LinkedList<String> lenguajes = new LinkedList<>();
        lenguajes.add("Python");
        lenguajes.add("Java");
        lenguajes.add("JavaScript");
        System.out.println("LinkedList: " + lenguajes);
        String str = lenguajes.get(1);
        System.out.print("Elemento en índice 1: " + str);
    }
}

Salida

LinkedList: [Python, Java, JavaScript] Elemento en índice 1: Java

La iteración también puede realizarse vía iterator() o listIterator() para recorrido avanzado.


3. Actualizando Elementos

Reemplaza un elemento en un índice específico usando set():

import java.util.LinkedList;
class Main {
    public static void main(String[] args){
        LinkedList<String> lenguajes = new LinkedList<>();
        lenguajes.add("Java");
        lenguajes.add("Python");
        lenguajes.add("JavaScript");
        lenguajes.add("Java");
        System.out.println("LinkedList: " + lenguajes);
        lenguajes.set(3, "Kotlin");
        System.out.println("LinkedList Actualizado: " + lenguajes);
    }
}

Salida

LinkedList: [Java, Python, JavaScript, Java] LinkedList Actualizado: [Java, Python, JavaScript, Kotlin]

4. Eliminando Elementos

Elimina un elemento por índice con remove():

import java.util.LinkedList;
class Main {
    public static void main(String[] args){
        LinkedList<String> lenguajes = new LinkedList<>();
        lenguajes.add("Java");
        lenguajes.add("Python");
        lenguajes.add("JavaScript");
        lenguajes.add("Kotlin");
        System.out.println("LinkedList: " + lenguajes);
        String eliminado = lenguajes.remove(1);
        System.out.println("Elemento Eliminado: " + eliminado);
        System.out.println("LinkedList Actualizado: " + lenguajes);
    }
}

Salida

LinkedList: [Java, Python, JavaScript, Kotlin] Elemento Eliminado: Python Nuevo LinkedList: [Java, JavaScript, Kotlin]

Otros Métodos Útiles

MétodoDescripción
contains()Verifica si existe un valor
indexOf()Índice de la primera ocurrencia
lastIndexOf()Índice de la última ocurrencia
clear()Elimina todos los elementos
iterator()Proporciona un Iterator

LinkedList como Queue y Deque

Como LinkedList implementa Queue y Deque, soporta operaciones FIFO y LIFO. Métodos comunes incluyen:

MétodoDescripción
addFirst()Añadir al principio
addLast()Añadir al final
getFirst()Ver primero
getLast()Ver último
removeFirst()Eliminar primero
removeLast()Eliminar último
peek()Ver cabeza sin eliminar
poll()Recuperar y eliminar cabeza
offer()Encolar al final

Ejemplo: LinkedList como Queue

import java.util.LinkedList;
import java.util.Queue;
class Main {
    public static void main(String[] args){
        Queue<String> lenguajes = new LinkedList<>();
        lenguajes.add("Python");
        lenguajes.add("Java");
        lenguajes.add("C");
        System.out.println("LinkedList: " + lenguajes);
        String primero = lenguajes.peek();
        System.out.println("Elemento Accedido: " + primero);
        String eliminado = lenguajes.poll();
        System.out.println("Elemento Eliminado: " + eliminado);
        System.out.println("LinkedList después de poll(): " + lenguajes);
        lenguajes.offer("Swift");
        System.out.println("LinkedList después de offer(): " + lenguajes);
    }
}

Salida

LinkedList: [Python, Java, C] Elemento Accedido: Python Elemento Eliminado: Python LinkedList después de poll(): [Java, C] LinkedList después de offer(): [Java, C, Swift]

Ejemplo: LinkedList como Deque

import java.util.LinkedList;
import java.util.Deque;
class Main {
    public static void main(String[] args){
        Deque<String> animales = new LinkedList<>();
        animales.add("Vaca");
        System.out.println("LinkedList: " + animales);
        animales.addFirst("Perro");
        System.out.println("LinkedList después de addFirst(): " + animales);
        animales.addLast("Cebra");
        System.out.println("LinkedList después de addLast(): " + animales);
        animales.removeFirst();
        System.out.println("LinkedList después de removeFirst(): " + animales);
        animales.removeLast();
        System.out.println("LinkedList después de removeLast(): " + animales);
    }
}

Salida

LinkedList: [Vaca] LinkedList después de addFirst(): [Perro, Vaca] LinkedList después de addLast(): [Perro, Vaca, Cebra] LinkedList después de removeFirst(): [Vaca, Cebra] LinkedList después de removeLast(): [Vaca]

Iterando a Través de un LinkedList

El bucle for-each mejorado ofrece una forma concisa de recorrer elementos:

import java.util.LinkedList;
class Main {
    public static void main(String[] args){
        LinkedList<String> animales = new LinkedList<>();
        animales.add("Vaca");
        animales.add("Gato");
        animales.add("Perro");
        System.out.println("LinkedList: " + animales);
        System.out.println("Accediendo a elementos de la lista enlazada:");
        for(String animal: animales){
            System.out.print(animal + ", ");
        }
    }
}

Salida

LinkedList: [Vaca, Gato, Perro] Accediendo a elementos de la lista enlazada: Vaca, Gato, Perro,

LinkedList vs. ArrayList

Ambas clases implementan List, pero difieren en características de rendimiento:

LinkedListArrayList
Implementa List, Queue, DequeImplementa List
Nodo almacena prev, data, nextUn elemento por posición del array
Estructura doblemente enlazadaArray redimensionable
Inserciones/eliminaciones son O(1) cuando se conoce la posiciónInserciones tras un índice requieren desplazamiento O(n)
Acceso aleatorio requiere recorrido O(n)Acceso directo por índice O(1)

Nota: Puedes instanciar un LinkedList a través de cualquiera de sus interfaces:

// vía List
List<String> animales1 = new LinkedList<>();
// vía Queue
Queue<String> animales2 = new LinkedList<>();
// vía Deque
Deque<String> animales3 = new LinkedList<>();

Cuando usas una referencia de interfaz, solo están disponibles los métodos definidos por esa interfaz.

Java

  1. Dominar Operadores en Java: Tipos, Sintaxis y Ejemplos Prácticos
  2. Comentarios en Java: Tipos, Uso y Mejores Prácticas
  3. Dominar el Bucle for Mejorado en Java: Sintaxis, Ejemplos y Mejores Prácticas
  4. Dominar Strings en Java: Creación, Métodos y Mejores Prácticas
  5. Dominando interfaces en Java: Conceptos, implementación y mejores prácticas
  6. Dominando las clases internas anónimas en Java: Definición, sintaxis y ejemplos prácticos
  7. Dominando Try‑with‑Resources en Java: Gestión automática de recursos explicada
  8. Anotaciones en Java explicadas: Tipos, ubicación y ejemplos prácticos
  9. Aserciones en Java: Guía práctica para detectar bugs y asegurar fiabilidad del código
  10. Entendiendo Java Vector: Uso, Características y Comparación con ArrayList
  11. Java 8: Guía de Referencia Rápida Completa