Java LinkedList: Uitgebreide handleiding met voorbeelden
Java LinkedList
Ontdek hoe je Java's LinkedList kunt benutten voor efficiënte datamanipulatie, met praktische codevoorbeelden en best-practice inzichten.
De LinkedList-klasse in het Java Collections Framework implementeert een dubbel gelinkte lijst. Elk element, of node, bevat drie velden:
- prev – referentie naar de voorgaande node (null voor het eerste element)
- next – referentie naar de volgende node (null voor het laatste element)
- data – de daadwerkelijke waarde opgeslagen in de node
Een Java LinkedList aanmaken
Instantieer een LinkedList met een specifiek elementtype:
LinkedList<Type> list = new LinkedList<>();
Voorbeelden:
// Integer lijst LinkedList<Integer> numbers = new LinkedList<>(); // String lijst LinkedList<String> words = new LinkedList<>();
Voorbeeld: LinkedList aanmaken in Java
import java.util.LinkedList; class Main { public static void main(String[] args){ LinkedList<String> animals = new LinkedList<>(); animals.add("Dog"); animals.add("Cat"); animals.add("Cow"); System.out.println("LinkedList: " + animals); } }
Output
LinkedList: [Dog, Cat, Cow]
Deze code demonstreert een basis LinkedList genaamd animals gevuld met drie elementen via add().
Hoe een Java LinkedList werkt
In tegenstelling tot arrays, zijn nodes in het geheugen verspreid en aan elkaar gelinkt. Het onderstaande diagram illustreert drie nodes en hun verbindingen.

- Dog – eerste node, prev = null, next = Cat
- Cat – middelste node, prev = Dog, next = Cow
- Cow – laatste node, prev = Cat, next = null
Voor diepere inzicht, zie het Linked List-artikel.
Belangrijkste LinkedList-methoden
Hieronder de meest gebruikte operaties:
- Elementen toevoegen
- Elementen benaderen
- Elementen bijwerken
- Elementen verwijderen
1. Elementen toevoegen
Gebruik add() om een node aan het einde toe te voegen, optioneel met een index:
import java.util.LinkedList; class Main { public static void main(String[] args){ LinkedList<String> animals = new LinkedList<>(); animals.add("Dog"); animals.add("Cat"); animals.add("Cow"); System.out.println("LinkedList: " + animals); animals.add(1, "Horse"); System.out.println("Bijgewerkte LinkedList: " + animals); } }
Output
LinkedList: [Dog, Cat, Cow] Bijgewerkte LinkedList: [Dog, Horse, Cat, Cow]
De tweede add() voegt "Horse" in op index 1, wat opvolgende elementen opschuift.
2. Elementen benaderen
Haal een item op index op met get():
import java.util.LinkedList; class Main { public static void main(String[] args){ LinkedList<String> languages = new LinkedList<>(); languages.add("Python"); languages.add("Java"); languages.add("JavaScript"); System.out.println("LinkedList: " + languages); String str = languages.get(1); System.out.print("Element op index 1: " + str); } }
Output
LinkedList: [Python, Java, JavaScript] Element op index 1: Java
Iteratie kan ook via iterator() of listIterator() voor geavanceerde traversal.
3. Elementen bijwerken
Vervang een element op een specifieke index met set():
import java.util.LinkedList; class Main { public static void main(String[] args){ LinkedList<String> languages = new LinkedList<>(); languages.add("Java"); languages.add("Python"); languages.add("JavaScript"); languages.add("Java"); System.out.println("LinkedList: " + languages); languages.set(3, "Kotlin"); System.out.println("Bijgewerkte LinkedList: " + languages); } }
Output
LinkedList: [Java, Python, JavaScript, Java] Bijgewerkte LinkedList: [Java, Python, JavaScript, Kotlin]
4. Elementen verwijderen
Verwijder een element op index met remove():
import java.util.LinkedList; class Main { public static void main(String[] args){ LinkedList<String> languages = new LinkedList<>(); languages.add("Java"); languages.add("Python"); languages.add("JavaScript"); languages.add("Kotlin"); System.out.println("LinkedList: " + languages); String removed = languages.remove(1); System.out.println("Verwijderd element: " + removed); System.out.println("Bijgewerkte LinkedList: " + languages); } }
Output
LinkedList: [Java, Python, JavaScript, Kotlin] Verwijderd element: Python Nieuwe LinkedList: [Java, JavaScript, Kotlin]
Overige nuttige methoden
| Methode | Beschrijving |
|---|---|
contains() | Controleert of een waarde bestaat |
indexOf() | Eerste voorkomensindex |
lastIndexOf() | Laatste voorkomensindex |
clear() | Verwijdert alle elementen |
iterator() | Levert een Iterator |
LinkedList als Queue en Deque
Omdat LinkedList Queue en Deque implementeert, ondersteunt het FIFO- en LIFO-operaties. Veelvoorkomende methoden:
| Methode | Beschrijving |
|---|---|
addFirst() | Toevoegen aan head |
addLast() | Toevoegen aan tail |
getFirst() | Bekijken head |
getLast() | Bekijken tail |
removeFirst() | Pop head |
removeLast() | Pop tail |
peek() | Bekijken head zonder verwijdering |
poll() | Ophalen & verwijderen head |
offer() | Enqueue aan tail |
Voorbeeld: LinkedList als Queue
import java.util.LinkedList; import java.util.Queue; class Main { public static void main(String[] args){ Queue<String> languages = new LinkedList<>(); languages.add("Python"); languages.add("Java"); languages.add("C"); System.out.println("LinkedList: " + languages); String first = languages.peek(); System.out.println("Toegankelijk element: " + first); String removed = languages.poll(); System.out.println("Verwijderd element: " + removed); System.out.println("LinkedList na poll(): " + languages); languages.offer("Swift"); System.out.println("LinkedList na offer(): " + languages); } }
Output
LinkedList: [Python, Java, C] Toegankelijk element: Python Verwijderd element: Python LinkedList na poll(): [Java, C] LinkedList na offer(): [Java, C, Swift]
Voorbeeld: LinkedList als Deque
import java.util.LinkedList; import java.util.Deque; class Main { public static void main(String[] args){ Deque<String> animals = new LinkedList<>(); animals.add("Cow"); System.out.println("LinkedList: " + animals); animals.addFirst("Dog"); System.out.println("LinkedList na addFirst(): " + animals); animals.addLast("Zebra"); System.out.println("LinkedList na addLast(): " + animals); animals.removeFirst(); System.out.println("LinkedList na removeFirst(): " + animals); animals.removeLast(); System.out.println("LinkedList na removeLast(): " + animals); } }
Output
LinkedList: [Cow] LinkedList na addFirst(): [Dog, Cow] LinkedList na addLast(): [Dog, Cow, Zebra] LinkedList na removeFirst(): [Cow, Zebra] LinkedList na removeLast(): [Cow]
Itereren door een LinkedList
De enhanced for-loop biedt een beknopte manier om elementen te doorlopen:
import java.util.LinkedList; class Main { public static void main(String[] args){ LinkedList<String> animals = new LinkedList<>(); animals.add("Cow"); animals.add("Cat"); animals.add("Dog"); System.out.println("LinkedList: " + animals); System.out.println("LinkedList-elementen benaderen:"); for(String animal: animals){ System.out.print(animal + ", "); } } }
Output
LinkedList: [Cow, Cat, Dog] LinkedList-elementen benaderen: Cow, Cat, Dog,
LinkedList vs. ArrayList
Beide klassen implementeren List, maar verschillen in prestatiekenmerken:
| LinkedList | ArrayList |
|---|---|
Implementeert List, Queue, Deque | Implementeert List |
| Node slaat prev, data, next op | Enkel element per array-slot |
| Dubbel gelinkte structuur | Vergrootbaar array |
| Invoeging/verwijdering O(1) wanneer positie bekend | Invoeging na index vereist schuiven O(n) |
| Willekeurige toegang vereist traversal O(n) | Directe indextoegang O(1) |
Let op: Je kunt een LinkedList instantiëren via elke interface:
// via List List<String> animals1 = new LinkedList<>(); // via Queue Queue<String> animals2 = new LinkedList<>(); // via Deque Deque<String> animals3 = new LinkedList<>();
Bij gebruik van een interface-referentie zijn alleen de methoden gedefinieerd door die interface beschikbaar.
Java
- Java-operators beheersen: typen, syntax en praktische voorbeelden
- Java-commentaar: typen, gebruik en best practices
- Java Enhanced For-lus beheersen: syntax, voorbeelden en best practices
- Java Strings beheersen: aanmaken, methodes en best practices
- Java interfaces meesteren: concepten, implementatie en best practices
- Java anonieme inner classes meesteren: definitie, syntax en praktische voorbeelden
- Java Try-with-resources meesteren: automatische resource management uitgelegd
- Java Annotaties uitgelegd: typen, plaatsing en praktische voorbeelden
- Java Assertions: een praktische gids voor bugdetectie en codebetrouwbaarheid
- Java Vector begrijpen: Gebruik, Kenmerken en Vergelijking met ArrayList
- Java 8: Uitgebreide Quick Reference Gids