Industrial manufacturing
Industrial Internet of Things | Industrial materials | Equipment Maintenance and Repair | Industrial programming |
home  MfgRobots >> Industrial manufacturing >  >> Industrial programming >> Java

Mastering Java ArrayDeque: Comprehensive Guide & Stack Implementation

Java ArrayDeque

This guide explains the ArrayDeque class, its methods, and practical examples—including how to use it as a stack.

In Java, ArrayDeque implements queue and deque data structures backed by a resizable array.


Interfaces Implemented by ArrayDeque

The ArrayDeque class implements the following interfaces:

Mastering Java ArrayDeque: Comprehensive Guide & Stack Implementation


Creating an ArrayDeque

First import the package:

import java.util.ArrayDeque;

Instantiate a typed deque:

ArrayDeque<Type> deque = new ArrayDeque<>();

Examples:

// String deque
ArrayDeque<String> animals = new ArrayDeque<>();

// Integer deque
ArrayDeque<Integer> ages = new ArrayDeque<>();

Key ArrayDeque Methods

Inserting Elements

1. Using add(), addFirst(), addLast()

Note: If the deque is full, these methods throw 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. Using offer(), offerFirst(), offerLast()

Note: These methods return false if the deque is full.

ArrayDeque<String> animals = new ArrayDeque<>();
animals.offer("Dog");
animals.offerFirst("Cat");
animals.offerLast("Horse");
System.out.println("ArrayDeque: " + animals);

Output

ArrayDeque: [Cat, Dog, Horse]

Accessing Elements

1. getFirst() and getLast()

Note: Throws NoSuchElementException if the deque is empty.

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());

Output

ArrayDeque: [Dog, Cat, Horse]
First Element: Dog
Last Element: Horse

2. peek(), peekFirst(), peekLast()

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());

Output

ArrayDeque: [Dog, Cat, Horse]
Head Element: Dog
First Element: Dog
Last Element: Horse

Note: If the deque is empty, peek() and friends return null instead of throwing.

Removing Elements

1. remove(), removeFirst(), removeLast()

Note: Throws NoSuchElementException if the deque is empty or if remove(o) cannot find o.

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());

Output

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()

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());

Output

ArrayDeque: [Dog, Cat, Cow, Horse]
Removed Element: Dog
New ArrayDeque: [Cat, Cow, Horse]
Removed First Element: Cat
Removed Last Element: Horse

3. clear()

Empties the entire 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);

Output

ArrayDeque: [Dog, Cat, Horse]
New ArrayDeque: []

Iterating Over an ArrayDeque

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() + ", ");
}

Output

ArrayDeque: [Dog, Cat, Horse]
ArrayDeque in reverse order: [Horse, Cat, Dog]

Other Common Methods

Method Description
element() Retrieves but does not remove the head.
contains(Object o) Checks for the presence of o; returns true if found.
size() Number of elements in the deque.
toArray() Converts the deque to an array.
clone() Creates a shallow copy of the deque.

Using ArrayDeque as a Stack

For LIFO behavior, ArrayDeque is preferable over Stack due to better performance and no legacy synchronization overhead.

Stack‑style methods:

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());

Output

Stack: [Horse, Cat, Dog]
Accessed Element: Horse
Removed Element: Horse

ArrayDeque vs LinkedList

Both implement Deque, yet they differ:


Java

  1. Master Java Operators: Types, Syntax, & Practical Examples
  2. Java Comments: Types, Usage, and Best Practices
  3. Mastering Java if…else: Control Flow Explained
  4. Mastering the Java Enhanced For Loop: Syntax, Examples, and Best Practices
  5. Mastering Java's super Keyword: Advanced Usage & Practical Examples
  6. Mastering Java Interfaces: Concepts, Implementation, and Best Practices
  7. Mastering Java Try‑with‑Resources: Automatic Resource Management Explained
  8. Java Annotations Explained: Types, Placement, and Practical Examples
  9. Mastering Java's Deque Interface: Features, Methods, and Practical Examples
  10. Mastering Java ArrayDeque: Comprehensive Guide & Stack Implementation