Java ArrayDeque meistern: Umfassender Leitfaden & Stack-Implementierung
Java ArrayDeque
Dieser Leitfaden erklärt die ArrayDeque-Klasse, ihre Methoden und praktische Beispiele – einschließlich der Nutzung als Stack.
In Java implementiert ArrayDeque Queue- und Deque-Datenstrukturen, die von einem größenveränderbaren Array unterstützt werden.
Von ArrayDeque implementierte Interfaces
Die ArrayDeque-Klasse implementiert folgende Interfaces:
- Java Queue Interface
- Java Deque Interface

ArrayDeque erstellen
Zuerst das Paket importieren:
import java.util.ArrayDeque;
Typisierten Deque instanziieren:
ArrayDeque<Type> deque = new ArrayDeque<>();
Beispiele:
// String-Deque ArrayDeque<String> animals = new ArrayDeque<>(); // Integer-Deque ArrayDeque<Integer> ages = new ArrayDeque<>();
Wichtige ArrayDeque-Methoden
Elemente einfügen
1. Mit add(), addFirst(), addLast()
add(E e)– fügteam Ende an.addFirst(E e)– fügteam Anfang ein.addLast(E e)– entsprichtadd().
Hinweis: Falls Deque voll, werfen diese Methoden IllegalStateException.
ArrayDeque<String> animals = new ArrayDeque<>(); animals.add("Dog"); animals.addFirst("Cat"); animals.addLast("Horse"); System.out.println("ArrayDeque: " + animals);
Ausgabe
ArrayDeque: [Cat, Dog, Horse]
2. Mit offer(), offerFirst(), offerLast()
offer(E e)– fügteam Ende an, gibttruebei Erfolg zurück.offerFirst(E e)– fügteam Anfang ein.offerLast(E e)– gleichoffer().
Hinweis: Diese Methoden geben false zurück, falls Deque voll.
ArrayDeque<String> animals = new ArrayDeque<>(); animals.offer("Dog"); animals.offerFirst("Cat"); animals.offerLast("Horse"); System.out.println("ArrayDeque: " + animals);
Ausgabe
ArrayDeque: [Cat, Dog, Horse]
Auf Elemente zugreifen
1. getFirst() und getLast()
getFirst()– gibt das vordere Element zurück.getLast()– gibt das hintere Element zurück.
Hinweis: Wirft NoSuchElementException, falls Deque leer.
ArrayDeque<String> animals = new ArrayDeque<>(); animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("ArrayDeque: " + animals); System.out.println("First Element: " + animals.getFirst()); System.out.println("Last Element: " + animals.getLast());
Ausgabe
ArrayDeque: [Dog, Cat, Horse] First Element: Dog Last Element: Horse
2. peek(), peekFirst(), peekLast()
peek()– ruft ab ohne zu entfernen das vordere Element.peekFirst()– Synonym fürpeek().peekLast()– ruft das hintere Element ab.
ArrayDeque<String> animals = new ArrayDeque<>(); animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("ArrayDeque: " + animals); System.out.println("Head Element: " + animals.peek()); System.out.println("First Element: " + animals.peekFirst()); System.out.println("Last Element: " + animals.peekLast());
Ausgabe
ArrayDeque: [Dog, Cat, Horse] Head Element: Dog First Element: Dog Last Element: Horse
Hinweis: Falls Deque leer, geben peek() und Freunde null zurück statt Exception zu werfen.
Elemente entfernen
1. remove(), removeFirst(), removeLast()
remove()– entfernt und gibt das vordere Element zurück.removeFirst()– gleichremove().removeLast()– entfernt und gibt das hintere Element zurück.remove(Object o)– entfernt erstes Vorkommen vonofalls vorhanden.
Hinweis: Wirft NoSuchElementException, falls Deque leer oder remove(o) o nicht findet.
ArrayDeque<String> animals = new ArrayDeque<>(); animals.add("Dog"); animals.add("Cat"); animals.add("Cow"); animals.add("Horse"); System.out.println("ArrayDeque: " + animals); System.out.println("Removed Element: " + animals.remove()); System.out.println("New ArrayDeque: " + animals); System.out.println("Removed First Element: " + animals.removeFirst()); System.out.println("Removed Last Element: " + animals.removeLast());
Ausgabe
ArrayDeque: [Dog, Cat, Cow, Horse] Removed Element: Dog New ArrayDeque: [Cat, Cow, Horse] Removed First Element: Cat Removed Last Element: Horse
2. poll(), pollFirst(), pollLast()
poll()– entfernt und gibt vorderes Element zurück, odernullfalls leer.pollFirst()– Synonym fürpoll().pollLast()– entfernt und gibt hinteres Element zurück.
ArrayDeque<String> animals = new ArrayDeque<>(); animals.add("Dog"); animals.add("Cat"); animals.add("Cow"); animals.add("Horse"); System.out.println("ArrayDeque: " + animals); System.out.println("Removed Element: " + animals.poll()); System.out.println("New ArrayDeque: " + animals); System.out.println("Removed First Element: " + animals.pollFirst()); System.out.println("Removed Last Element: " + animals.pollLast());
Ausgabe
ArrayDeque: [Dog, Cat, Cow, Horse] Removed Element: Dog New ArrayDeque: [Cat, Cow, Horse] Removed First Element: Cat Removed Last Element: Horse
3. clear()
Leert den gesamten Deque.
ArrayDeque<String> animals = new ArrayDeque<>(); animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("ArrayDeque: " + animals); animals.clear(); System.out.println("New ArrayDeque: " + animals);
Ausgabe
ArrayDeque: [Dog, Cat, Horse] New ArrayDeque: []
Über einen ArrayDeque iterieren
iterator()– Vorwärts-Iterator.descendingIterator()– Rückwärts-Iterator.
ArrayDeque<String> animals = new ArrayDeque<>(); animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.print("ArrayDeque: "); Iterator<String> it = animals.iterator(); while(it.hasNext()) { System.out.print(it.next() + ", "); } System.out.print("\nArrayDeque in reverse order: "); Iterator<String> rev = animals.descendingIterator(); while(rev.hasNext()) { System.out.print(rev.next() + ", "); }
Ausgabe
ArrayDeque: [Dog, Cat, Horse] ArrayDeque in reverse order: [Horse, Cat, Dog]
Weitere gängige Methoden
| Methode | Beschreibung |
|---|---|
element() |
Ruft ab aber entfernt nicht das vordere Element. |
contains(Object o) |
Prüft Anwesenheit von o; gibt true falls gefunden. |
size() |
Anzahl Elemente im Deque. |
toArray() |
Konvertiert Deque in Array. |
clone() |
Erstellt flache Kopie des Deque. |
ArrayDeque als Stack verwenden
Für LIFO-Verhalten ist ArrayDeque gegenüber Stack vorzuziehen aufgrund besserer Performance und ohne Legacy-Synchronisations-Overhead.
Stack-ähnliche Methoden:
push(E e)– fügt am Anfang hinzu.peek()– ruft oberstes Element ab ohne Entfernung.pop()– entfernt und gibt oberstes Element zurück.
ArrayDeque<String> stack = new ArrayDeque<>(); stack.push("Dog"); stack.push("Cat"); stack.push("Horse"); System.out.println("Stack: " + stack); System.out.println("Accessed Element: " + stack.peek()); System.out.println("Removed Element: " + stack.pop());
Ausgabe
Stack: [Horse, Cat, Dog] Accessed Element: Horse Removed Element: Horse
ArrayDeque vs LinkedList
Beide implementieren Deque, unterscheiden sich aber:
LinkedListerlaubtnull-Elemente;ArrayDequenicht.- LinkedList-Knoten speichern Pointer, verbrauchen mehr Speicher.
- Für Queue/Deque-Workloads übertrifft
ArrayDequetypischerweiseLinkedList.
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