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
- Importació de la classe LinkedList: Importem la classe
LinkedList
del paquetjava.util
. - Creació de la LinkedList: Creem una instància de
LinkedList
que emmagatzemarà elements de tipusString
. - Afegir elements: Utilitzem el mètode
add
per afegir elements a la llista. - 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
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
- Introducció a Java
- Configuració de l'Entorn de Desenvolupament
- Sintaxi i Estructura Bàsica
- Variables i Tipus de Dades
- Operadors
Mòdul 2: Flux de Control
Mòdul 3: Programació Orientada a Objectes
- Introducció a la POO
- Classes i Objectes
- Mètodes
- Constructors
- Herència
- Polimorfisme
- Encapsulació
- Abstracció
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
- Lectura de Fitxers
- Escriptura de Fitxers
- Fluxos de Fitxers
- BufferedReader i BufferedWriter
- Serialització
Mòdul 8: Multithreading i Concurrència
- Introducció al Multithreading
- Creació de Fils
- Cicle de Vida dels Fils
- Sincronització
- Utilitats de Concurrència
Mòdul 9: Xarxes
- Introducció a les Xarxes
- Sockets
- ServerSocket
- DatagramSocket i DatagramPacket
- URL i HttpURLConnection