Introducció a LinkedList

En aquest tema, explorarem la classe LinkedList de Java, que forma part del paquet java.util. Una LinkedList és una estructura de dades que permet emmagatzemar elements de manera seqüencial, però a diferència d'un array, els elements no estan emmagatzemats en posicions de memòria contigües. En lloc d'això, cada element (node) conté una referència al següent element de la llista, permetent una inserció i eliminació més eficient en comparació amb un ArrayList.

Característiques de LinkedList

  • Doble enllaç: Cada node conté una referència al node anterior i al node següent.
  • Inserció i eliminació eficients: Les operacions d'inserció i eliminació són més ràpides en comparació amb un ArrayList, especialment quan es treballa amb elements al principi o al mig de la llista.
  • Accés seqüencial: L'accés als elements és més lent en comparació amb un ArrayList perquè s'ha de recórrer la llista des del principi fins a trobar l'element desitjat.

Creació d'una LinkedList

Exemple de codi

import java.util.LinkedList;

public class LinkedListExample {
    public static void main(String[] args) {
        // Creació d'una LinkedList de Strings
        LinkedList<String> linkedList = new LinkedList<>();

        // Afegir elements a la LinkedList
        linkedList.add("Element 1");
        linkedList.add("Element 2");
        linkedList.add("Element 3");

        // Mostrar la LinkedList
        System.out.println("LinkedList: " + linkedList);
    }
}

Explicació del codi

  1. Importació de la classe LinkedList: Importem la classe LinkedList del paquet java.util.
  2. Creació de la LinkedList: Creem una instància de LinkedList que emmagatzemarà elements de tipus String.
  3. Afegir elements: Utilitzem el mètode add per afegir elements a la llista.
  4. Mostrar la LinkedList: Utilitzem el mètode println per mostrar el contingut de la llista.

Operacions amb LinkedList

Afegir elements

linkedList.addFirst("Primer Element"); // Afegir al principi
linkedList.addLast("Últim Element");   // Afegir al final
linkedList.add(2, "Element al Mig");   // Afegir en una posició específica

Eliminar elements

linkedList.removeFirst(); // Eliminar el primer element
linkedList.removeLast();  // Eliminar l'últim element
linkedList.remove(1);     // Eliminar l'element en una posició específica

Accedir a elements

String primerElement = linkedList.getFirst(); // Obtenir el primer element
String últimElement = linkedList.getLast();   // Obtenir l'últim element
String element = linkedList.get(2);           // Obtenir l'element en una posició específica

Iterar sobre la LinkedList

for (String element : linkedList) {
    System.out.println(element);
}

Comparació entre LinkedList i ArrayList

Característica LinkedList ArrayList
Estructura Doble enllaç Array dinàmic
Inserció/Eliminació Més eficient (especialment al principi o al mig) Menys eficient (requereix desplaçament d'elements)
Accés als elements Més lent (accés seqüencial) Més ràpid (accés aleatori)
Memòria Més ús de memòria (nodes i referències) Menys ús de memòria

Exercicis Pràctics

Exercici 1: Crear una LinkedList d'Integers

Descripció: Crea una LinkedList d'Integers, afegeix els números del 1 al 5, elimina el tercer element i mostra la llista resultant.

Solució:

import java.util.LinkedList;

public class LinkedListExercise1 {
    public static void main(String[] args) {
        LinkedList<Integer> numbers = new LinkedList<>();

        // Afegir elements
        for (int i = 1; i <= 5; i++) {
            numbers.add(i);
        }

        // Eliminar el tercer element (índex 2)
        numbers.remove(2);

        // Mostrar la LinkedList
        System.out.println("LinkedList: " + numbers);
    }
}

Exercici 2: Iterar i modificar elements

Descripció: Crea una LinkedList de Strings, afegeix alguns noms, itera sobre la llista i converteix cada nom a majúscules.

Solució:

import java.util.LinkedList;

public class LinkedListExercise2 {
    public static void main(String[] args) {
        LinkedList<String> names = new LinkedList<>();

        // Afegir elements
        names.add("Anna");
        names.add("Bernat");
        names.add("Carla");

        // Iterar i modificar elements
        for (int i = 0; i < names.size(); i++) {
            names.set(i, names.get(i).toUpperCase());
        }

        // Mostrar la LinkedList
        System.out.println("LinkedList: " + names);
    }
}

Conclusió

En aquest tema, hem après què és una LinkedList, com crear-la i com realitzar operacions bàsiques com afegir, eliminar i accedir a elements. També hem comparat LinkedList amb ArrayList per entendre millor quan utilitzar cadascuna. Finalment, hem practicat amb alguns exercicis per reforçar els conceptes apresos. En el següent tema, explorarem una altra estructura de dades important: HashMap.

Curs de Programació en Java

Mòdul 1: Introducció a Java

Mòdul 2: Flux de Control

Mòdul 3: Programació Orientada a Objectes

Mòdul 4: Programació Orientada a Objectes Avançada

Mòdul 5: Estructures de Dades i Col·leccions

Mòdul 6: Gestió d'Excepcions

Mòdul 7: Entrada/Sortida de Fitxers

Mòdul 8: Multithreading i Concurrència

Mòdul 9: Xarxes

Mòdul 10: Temes Avançats

Mòdul 11: Frameworks i Llibreries de Java

Mòdul 12: Construcció d'Aplicacions del Món Real

© Copyright 2024. Tots els drets reservats