How do you implement a Deque in Java?

Table of Contents

Introduction

A Deque (Double-Ended Queue) is a linear data structure that allows elements to be added or removed from both ends (front and back). Unlike a regular queue (FIFO) or stack (LIFO), a Deque provides more flexibility, allowing both enqueue and dequeue operations at both ends. In Java, the Deque interface is part of the Java Collections Framework, and it can be implemented using classes like ArrayDeque and LinkedList. This guide will explore how to implement and use a Deque in Java.

Methods of Deque Implementation in Java

1. Using the ArrayDeque Class

The ArrayDeque class is a resizable array implementation of the Deque interface. It provides fast constant-time operations for adding and removing elements from both ends.

Example:

Output:

2. Using the LinkedList Class

The LinkedList class also implements the Deque interface, providing a doubly linked list-based implementation. Like ArrayDeque, it supports fast insertion and removal of elements from both ends, but it uses more memory due to the linked node structure.

Example:

Output:

Deque Operations

Both ArrayDeque and LinkedList provide a wide range of operations to work with Deques. Some of the commonly used methods are:

1. addFirst() and addLast()

  • Adds an element to the front or the back of the deque.

2. offerFirst() and offerLast()

  • Similar to addFirst() and addLast(), but they do not throw an exception if the deque is full (though ArrayDeque is generally unbounded).

3. removeFirst() and removeLast()

  • Removes the first or the last element from the deque. These methods throw a NoSuchElementException if the deque is empty.

4. peekFirst() and peekLast()

  • Retrieves (but does not remove) the first or the last element in the deque. If the deque is empty, they return null instead of throwing an exception.

5. pollFirst() and pollLast()

  • Similar to removeFirst() and removeLast(), but they return null instead of throwing an exception if the deque is empty.

Practical Examples of Deque Use Cases

Example 1: Palindrome Checker

A deque can be used to check if a string is a palindrome. Since a palindrome reads the same forward and backward, we can utilize the removeFirst() and removeLast() methods to compare characters from both ends of the string.

Output:

Example 2: Undo Operation

A deque is useful in scenarios like an undo operation in an editor, where the most recent action needs to be undone first (LIFO). You can use addFirst() to add actions and removeFirst() to undo the most recent action.

Output:

Conclusion

In Java, you can implement a Deque using either ArrayDeque or LinkedList, both of which provide efficient operations for adding and removing elements from both ends. These implementations are ideal for use cases such as palindromes, undo/redo operations, and managing data with access at both ends. By leveraging the Deque interface, you can handle these tasks efficiently and effectively, making your programs more flexible and robust.

Similar Questions