Queue and Deque in Java
Introduction
In Java, the Queue and Deque interfaces are part of the java.util package. These interfaces provide ways to manage collections in a first-in-first-out (FIFO) or double-ended manner.
Queue: A collection designed for holding elements prior to processing. It follows FIFO order.
Deque: A double-ended queue that allows elements to be added or removed from both ends.
1. Queue
A Queue in Java is typically implemented using classes like LinkedList or PriorityQueue. Below is an example using LinkedList.
Example: Using Queue
import java.util.LinkedList;
import java.util.Queue;
public class QueueExample {
public static void main(String[] args) {
// Create a Queue
Queue queue = new LinkedList<>();
// Add elements to the Queue
queue.add("A");
queue.add("B");
queue.add("C");
// Display the Queue
System.out.println("Queue: " + queue);
// Peek at the head of the Queue
System.out.println("Head of Queue: " + queue.peek());
// Remove an element from the Queue
System.out.println("Removed: " + queue.poll());
// Display the Queue after removal
System.out.println("Queue after removal: " + queue);
}
}
2. Deque
A Deque (double-ended queue) can be implemented using classes like LinkedList or ArrayDeque. Below is an example using ArrayDeque.
Example: Using Deque
import java.util.ArrayDeque;
import java.util.Deque;
public class DequeExample {
public static void main(String[] args) {
// Create a Deque
Deque deque = new ArrayDeque<>();
// Add elements to the front and end
deque.addFirst("Front");
deque.addLast("End");
deque.addFirst("New Front");
// Display the Deque
System.out.println("Deque: " + deque);
// Peek at elements
System.out.println("First Element: " + deque.peekFirst());
System.out.println("Last Element: " + deque.peekLast());
// Remove elements from front and end
System.out.println("Removed from Front: " + deque.pollFirst());
System.out.println("Removed from End: " + deque.pollLast());
// Display the Deque after removals
System.out.println("Deque after removal: " + deque);
}
}
Differences Between Queue and Deque
| Feature | Queue | Deque |
|---|---|---|
| Operations | Elements are added at the end and removed from the front | Elements can be added or removed from both ends |
| Implementation | LinkedList, PriorityQueue | LinkedList, ArrayDeque |
| Flexibility | Single-ended | Double-ended |
Conclusion
Both Queue and Deque are useful in different scenarios:
- Queue: Use when you need FIFO operations.
- Deque: Use when you need operations at both ends.