Java LinkedList
Die Klasse LinkedList
in Java ist ein Teil des Java Collections Framework und implementiert die Schnittstellen List
und Deque
. Sie ist eine doppelt verkettete Liste, die eine dynamische Datenstruktur zum Speichern von Elementen bietet. Im Gegensatz zu Arrays ermöglicht LinkedList
das effiziente Einfügen und Entfernen von Elementen an beiden Enden und in der Mitte der Liste.
Verwendung
LinkedList
wird verwendet, wenn häufige Einfügungen und Löschungen erforderlich sind. Sie ist besonders nützlich, wenn die Größe der Liste nicht im Voraus bekannt ist oder wenn Elemente an beiden Enden der Liste hinzugefügt oder entfernt werden müssen.
Syntax
LinkedList<Type> linkedList = new LinkedList<>();
Type
: Der Typ der in der Liste gespeicherten Elemente.linkedList
: Der Name derLinkedList
Instanz.
Beispiele
Beispiel 1: Grundlegende Operationen
import java.util.LinkedList;
public class LinkedListExample {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
// Adding elements
list.add("Apple");
list.add("Banana");
list.add("Cherry");
// Accessing elements
System.out.println("First element: " + list.getFirst());
System.out.println("Last element: " + list.getLast());
// Removing elements
list.removeFirst();
list.removeLast();
System.out.println("List after removals: " + list);
}
}
Dieses Beispiel demonstriert grundlegende Operationen wie das Hinzufügen, Zugreifen und Entfernen von Elementen aus einer LinkedList
. Wir fügen der Liste drei Früchte hinzu, greifen auf das erste und das letzte Element zu und entfernen sie dann.
Beispiel 2: Iterieren durch eine LinkedList
import java.util.LinkedList;
import java.util.Iterator;
public class LinkedListIteration {
public static void main(String[] args) {
LinkedList<Integer> numbers = new LinkedList<>();
numbers.add(10);
numbers.add(20);
numbers.add(30);
Iterator<Integer> iterator = numbers.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
In diesem Beispiel verwenden wir eine Iterator
, um die LinkedList
von ganzen Zahlen zu durchlaufen. Die Iterator
bietet eine Möglichkeit, auf jedes Element der Reihe nach zuzugreifen.
Beispiel 3: LinkedList als Warteschlange verwenden
import java.util.LinkedList;
import java.util.Queue;
public class LinkedListAsQueue {
public static void main(String[] args) {
Queue<String> queue = new LinkedList<>();
// Enqueue elements
queue.add("First");
queue.add("Second");
queue.add("Third");
// Dequeue elements
System.out.println("Removed: " + queue.poll());
System.out.println("Queue after removal: " + queue);
}
}
Hier wird LinkedList
als Queue
verwendet. Die Elemente werden mit add()
hinzugefügt und mit poll()
entfernt, um das FIFO-Verhalten (First-In-First-Out) zu demonstrieren.
Tipps und bewährte Praktiken
- Wann zu verwenden: Verwende
LinkedList
, wenn du häufige Einfügungen und Löschungen benötigst, besonders am Anfang oder Ende der Liste. - Leistungsüberlegungen:
LinkedList
hat im Vergleich zuArrayList
einen höheren Overhead für den Zugriff auf Elemente nach Index, da der Zugriff sequentiell erfolgt. - Nullelemente:
LinkedList
erlaubtnull
Elemente, so dass möglicheNullPointerException
Szenarien behandelt werden können. - Thread Safety:
LinkedList
ist nicht synchronisiert. VerwendeCollections.synchronizedList(new LinkedList<>())
für thread-sichere Operationen. - Deque-Operationen: Verwende
LinkedList
alsDeque
für doppelendige Warteschlangenoperationen, wieaddFirst()
,addLast()
,removeFirst()
undremoveLast()
.