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 derLinkedListInstanz.
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:
LinkedListhat im Vergleich zuArrayListeinen höheren Overhead für den Zugriff auf Elemente nach Index, da der Zugriff sequentiell erfolgt. - Nullelemente:
LinkedListerlaubtnullElemente, so dass möglicheNullPointerExceptionSzenarien behandelt werden können. - Thread Safety:
LinkedListist nicht synchronisiert. VerwendeCollections.synchronizedList(new LinkedList<>())für thread-sichere Operationen. - Deque-Operationen: Verwende
LinkedListalsDequefür doppelendige Warteschlangenoperationen, wieaddFirst(),addLast(),removeFirst()undremoveLast().