Java ArrayDeque beheersen: Uitgebreide handleiding & Stack-implementatie
Java ArrayDeque
Deze handleiding legt de ArrayDeque-klasse uit, de methoden en praktische voorbeelden – inclusief hoe je het als stack gebruikt.
In Java implementeert ArrayDeque wachtrij- en deque-datastructuren ondersteund door een vergrootbaar array.
Interfaces geïmplementeerd door ArrayDeque
De ArrayDeque-klasse implementeert de volgende interfaces:
- Java Queue Interface
- Java Deque Interface

Een ArrayDeque aanmaken
Eerst het pakket importeren:
import java.util.ArrayDeque;
Instantieer een getypte deque:
ArrayDeque<Type> deque = new ArrayDeque<>();
Voorbeelden:
// String deque ArrayDeque<String> animals = new ArrayDeque<>(); // Integer deque ArrayDeque<Integer> ages = new ArrayDeque<>();
Belangrijkste ArrayDeque-methoden
Elementen invoegen
1. Met add(), addFirst(), addLast()
add(E e)– voegteaan de tail toe.addFirst(E e)– voegteaan de head in.addLast(E e)– equivalent aanadd().
Let op: Als de deque vol is, gooien deze methoden IllegalStateException.
ArrayDeque<String> animals = new ArrayDeque<>(); animals.add("Dog"); animals.addFirst("Cat"); animals.addLast("Horse"); System.out.println("ArrayDeque: " + animals);
Output
ArrayDeque: [Cat, Dog, Horse]
2. Met offer(), offerFirst(), offerLast()
offer(E e)– voegteaan de tail toe, retourneerttruebij succes.offerFirst(E e)– voegteaan de head in.offerLast(E e)– hetzelfde alsoffer().
Let op: Deze methoden retourneren false als de deque vol is.
ArrayDeque<String> animals = new ArrayDeque<>(); animals.offer("Dog"); animals.offerFirst("Cat"); animals.offerLast("Horse"); System.out.println("ArrayDeque: " + animals);
Output
ArrayDeque: [Cat, Dog, Horse]
Elementen benaderen
1. getFirst() en getLast()
getFirst()– retourneert het head-element.getLast()– retourneert het tail-element.
Let op: Gooit NoSuchElementException als de deque leeg is.
ArrayDeque<String> animals = new ArrayDeque<>(); animals.add("Dog"); animals.add("Cat"); animals.add("Horse"); System.out.println("ArrayDeque: " + animals); System.out.println("Eerste element: " + animals.getFirst()); System.out.println("Laatste element: " + animals.getLast());
Output
ArrayDeque: [Dog, Cat, Horse] Eerste element: Dog Laatste element: Horse
2. peek(), peekFirst(), peekLast()
peek()– haalt op zonder te verwijderen de head.peekFirst()– synoniem voorpeek().peekLast()– haalt de tail op.
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("Eerste element: " + animals.peekFirst()); System.out.println("Laatste element: " + animals.peekLast());
Output
ArrayDeque: [Dog, Cat, Horse] Head-element: Dog Eerste element: Dog Laatste element: Horse
Let op: Als de deque leeg is, retourneren peek() en verwanten null in plaats van te gooien.
Elementen verwijderen
1. remove(), removeFirst(), removeLast()
remove()– verwijdert en retourneert de head.removeFirst()– hetzelfde alsremove().removeLast()– verwijdert en retourneert de tail.remove(Object o)– verwijdert de eerste voorkomens vanoindien aanwezig.
Let op: Gooit NoSuchElementException als de deque leeg is of als remove(o) o niet vindt.
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("Verwijderd element: " + animals.remove()); System.out.println("Nieuwe ArrayDeque: " + animals); System.out.println("Verwijderd eerste element: " + animals.removeFirst()); System.out.println("Verwijderd laatste element: " + animals.removeLast());
Output
ArrayDeque: [Dog, Cat, Cow, Horse] Verwijderd element: Dog Nieuwe ArrayDeque: [Cat, Cow, Horse] Verwijderd eerste element: Cat Verwijderd laatste element: Horse
2. poll(), pollFirst(), pollLast()
poll()– verwijdert en retourneert de head, ofnullals leeg.pollFirst()– synoniem voorpoll().pollLast()– verwijdert en retourneert de tail.
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("Verwijderd element: " + animals.poll()); System.out.println("Nieuwe ArrayDeque: " + animals); System.out.println("Verwijderd eerste element: " + animals.pollFirst()); System.out.println("Verwijderd laatste element: " + animals.pollLast());
Output
ArrayDeque: [Dog, Cat, Cow, Horse] Verwijderd element: Dog Nieuwe ArrayDeque: [Cat, Cow, Horse] Verwijderd eerste element: Cat Verwijderd laatste element: Horse
3. clear()
Leegt de volledige 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("Nieuwe ArrayDeque: " + animals);
Output
ArrayDeque: [Dog, Cat, Horse] Nieuwe ArrayDeque: []
Itereren over een ArrayDeque
iterator()– forward iterator.descendingIterator()– reverse 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 omgekeerde volgorde: "); Iterator<String> rev = animals.descendingIterator(); while(rev.hasNext()) { System.out.print(rev.next() + ", "); }
Output
ArrayDeque: [Dog, Cat, Horse] ArrayDeque in omgekeerde volgorde: [Horse, Cat, Dog]
Overige veelvoorkomende methoden
| Methode | Beschrijving |
|---|---|
element() | Haalt op zonder te verwijderen de head. |
contains(Object o) | Controleert aanwezigheid van o; retourneert true als gevonden. |
size() | Aantal elementen in de deque. |
toArray() | Converteert de deque naar een array. |
clone() | Maakt een shallow copy van de deque. |
ArrayDeque als Stack gebruiken
Voor LIFO-gedrag is ArrayDeque te verkiezen boven Stack vanwege betere prestaties en geen legacy-synchronisatie-overhead.
Stack-stijl methoden:
push(E e)– voegt aan de head toe.peek()– haalt het top-element op zonder verwijdering.pop()– verwijdert en retourneert het top-element.
ArrayDeque<String> stack = new ArrayDeque<>(); stack.push("Dog"); stack.push("Cat"); stack.push("Horse"); System.out.println("Stack: " + stack); System.out.println("Toegankelijk element: " + stack.peek()); System.out.println("Verwijderd element: " + stack.pop());
Output
Stack: [Horse, Cat, Dog] Toegankelijk element: Horse Verwijderd element: Horse
ArrayDeque vs LinkedList
Beide implementeren Deque, maar verschillen:
LinkedListstaatnullelementen toe;ArrayDequeniet.- LinkedList-nodes slaan pointers op, wat meer geheugen verbruikt.
- Voor wachtrij/deque-workloads presteert
ArrayDequetypisch beter danLinkedList.
Java
- Java-operators beheersen: typen, syntax en praktische voorbeelden
- Java-commentaar: typen, gebruik en best practices
- Java if…else beheersen: control flow uitgelegd
- 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