Java LinkedList: Umfassender Leitfaden mit Beispielen
Java LinkedList
Entdecken Sie, wie Sie Javas LinkedList für effiziente Datenmanipulation nutzen können, komplett mit praktischen Code-Beispielen und Best-Practice-Einblicken.
Die LinkedList-Klasse im Java Collections Framework implementiert eine doppelt verkettete Liste. Jedes Element, oder Knoten, enthält drei Felder:
- prev – Referenz auf den vorherigen Knoten (null für das erste Element)
- next – Referenz auf den nächsten Knoten (null für das letzte Element)
- data – der eigentliche im Knoten gespeicherte Wert
Java LinkedList erstellen
Instanziieren Sie eine LinkedList mit einem spezifischen Elementtyp:
LinkedList<Type> list = new LinkedList<>();
Beispiele:
// Integer-Liste LinkedList<Integer> numbers = new LinkedList<>(); // String-Liste LinkedList<String> words = new LinkedList<>();
Beispiel: LinkedList in Java erstellen
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); } }
Ausgabe
LinkedList: [Dog, Cat, Cow]
Dieser Code demonstriert eine grundlegende LinkedList namens animals, die mit drei Elementen über add() befüllt wird.
Wie eine Java LinkedList funktioniert
Im Gegensatz zu Arrays sind Knoten im Speicher verstreut und miteinander verkettet. Das Diagramm unten veranschaulicht drei Knoten und ihre Verbindungen.

- Dog – erster Knoten, prev = null, next = Cat
- Cat – mittlerer Knoten, prev = Dog, next = Cow
- Cow – letzter Knoten, prev = Cat, next = null
Für tiefere Einblicke siehe den Linked List-Artikel.
Wichtige LinkedList-Methoden
Im Folgenden die am häufigsten verwendeten Operationen:
- Elemente hinzufügen
- Elemente abrufen
- Elemente aktualisieren
- Elemente entfernen
1. Elemente hinzufügen
Verwenden Sie add(), um einen Knoten anzuhängen, optional mit Indexangabe:
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("Updated LinkedList: " + animals); } }
Ausgabe
LinkedList: [Dog, Cat, Cow] Updated LinkedList: [Dog, Horse, Cat, Cow]
Der zweite add() fügt "Horse" an Index 1 ein und verschiebt nachfolgende Elemente.
2. Auf Elemente zugreifen
Rufen Sie ein Element über Index mit get() ab:
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 at index 1: " + str); } }
Ausgabe
LinkedList: [Python, Java, JavaScript] Element at index 1: Java
Iteration kann auch über iterator() oder listIterator() für fortgeschrittene Traversierung erfolgen.
3. Elemente aktualisieren
Ersetzen Sie ein Element an einem bestimmten Index mit 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("Updated LinkedList: " + languages); } }
Ausgabe
LinkedList: [Java, Python, JavaScript, Java] Updated LinkedList: [Java, Python, JavaScript, Kotlin]
4. Elemente entfernen
Löschen Sie ein Element über Index mit 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("Removed Element: " + removed); System.out.println("Updated LinkedList: " + languages); } }
Ausgabe
LinkedList: [Java, Python, JavaScript, Kotlin] Removed Element: Python New LinkedList: [Java, JavaScript, Kotlin]
Weitere nützliche Methoden
| Methode | Beschreibung |
|---|---|
contains() | Prüft, ob ein Wert existiert |
indexOf() | Index des ersten Vorkommens |
lastIndexOf() | Index des letzten Vorkommens |
clear() | Entfernt alle Elemente |
iterator() | Liefert einen Iterator |
LinkedList als Queue und Deque
Da LinkedList Queue und Deque implementiert, unterstützt es FIFO- und LIFO-Operationen. Gängige Methoden umfassen:
| Methode | Beschreibung |
|---|---|
addFirst() | Am Anfang hinzufügen |
addLast() | Am Ende hinzufügen |
getFirst() | Anfang ansehen |
getLast() | Ende ansehen |
removeFirst() | Am Anfang entfernen |
removeLast() | Am Ende entfernen |
peek() | Anfang ansehen ohne Entfernung |
poll() | Abrufen & Entfernen am Anfang |
offer() | Am Ende enqueuen |
Beispiel: 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("Accessed Element: " + first); String removed = languages.poll(); System.out.println("Removed Element: " + removed); System.out.println("LinkedList after poll(): " + languages); languages.offer("Swift"); System.out.println("LinkedList after offer(): " + languages); } }
Ausgabe
LinkedList: [Python, Java, C] Accessed Element: Python Removed Element: Python LinkedList after poll(): [Java, C] LinkedList after offer(): [Java, C, Swift]
Beispiel: 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 after addFirst(): " + animals); animals.addLast("Zebra"); System.out.println("LinkedList after addLast(): " + animals); animals.removeFirst(); System.out.println("LinkedList after removeFirst(): " + animals); animals.removeLast(); System.out.println("LinkedList after removeLast(): " + animals); } }
Ausgabe
LinkedList: [Cow] LinkedList after addFirst(): [Dog, Cow] LinkedList after addLast(): [Dog, Cow, Zebra] LinkedList after removeFirst(): [Cow, Zebra] LinkedList after removeLast(): [Cow]
Durch eine LinkedList iterieren
Die erweiterte for-Schleife bietet eine prägnante Möglichkeit, Elemente zu durchlaufen:
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("Accessing linked list elements:"); for(String animal: animals){ System.out.print(animal + ", "); } } }
Ausgabe
LinkedList: [Cow, Cat, Dog] Accessing linked list elements: Cow, Cat, Dog,
LinkedList vs. ArrayList
Beide Klassen implementieren List, unterscheiden sich aber in Performance-Eigenschaften:
| LinkedList | ArrayList |
|---|---|
Implementiert List, Queue, Deque | Implementiert List |
| Knoten speichert prev, data, next | Ein Element pro Array-Slot |
| Doppelt verkettete Struktur | Größenveränderbares Array |
| Einfügungen/Löschungen O(1) bei bekannter Position | Einfügungen nach Index erfordern Shifting O(n) |
| Zufälliger Zugriff erfordert Traversierung O(n) | Direkter Indexzugriff O(1) |
Hinweis: Sie können eine LinkedList über jedes ihrer Interfaces instanziieren:
// über List List<String> animals1 = new LinkedList<>(); // über Queue Queue<String> animals2 = new LinkedList<>(); // über Deque Deque<String> animals3 = new LinkedList<>();
Bei Verwendung einer Interface-Referenz sind nur die Methoden dieses Interfaces verfügbar.
Java
- Java Operatoren meistern: Typen, Syntax und praktische Beispiele
- Java Kommentare: Typen, Verwendung und Best Practices
- Java Enhanced For-Schleife meistern: Syntax, Beispiele und Best Practices
- Java Strings meistern: Erstellung, Methoden und Best Practices
- Java-Schnittstellen meistern: Konzepte, Implementierung und Best Practices
- Java anonyme innere Klassen meistern: Definition, Syntax und praktische Beispiele
- Java Try-With-Resources meistern: Automatisches Ressourcenmanagement erklärt
- Java Annotations erklärt: Typen, Platzierung und praktische Beispiele
- Java Assertions: Praktischer Leitfaden zur Fehlererkennung und Code-Reliabilität
- Java Vector verstehen: Verwendung, Funktionen und Vergleich mit ArrayList