Clean • Professional
Queues and Deques are important interfaces in the Java Collections Framework used for storing elements in a specific order — mainly for FIFO and LIFO operations. They are widely used in real-world systems like task scheduling, messaging systems, caching, BFS traversal, and more.
Both Queue and Deque are part of the java.util package.
A Queue is a linear data structure that stores elements in FIFO (First In, First Out) order.
The element inserted first is processed first — just like:
Queue is an interface under java.util.
Iterable
└── Collection
└── Queue
├── LinkedList
├── PriorityQueue
└── ArrayDeque
| Method | Description |
|---|---|
add(e) | Inserts element, throws exception on failure |
offer(e) | Inserts element, returns false if failed (safe) |
remove() | Removes head, throws exception if empty |
poll() | Removes head, returns null if empty |
element() | Returns head without removing, exception if empty |
peek() | Returns head without removing, null if empty |
add() vs offer() → offer() is saferremove() vs poll() → poll() is safer
1. LinkedList
2. PriorityQueue
3. ArrayDeque
Example: Queue Using LinkedList
Queue<String> queue = new LinkedList<>();
queue.offer("Java");
queue.offer("Python");
queue.offer("C++");
System.out.println(queue.poll()); // Java
System.out.println(queue.peek()); // Python
A Deque (Double-Ended Queue) allows insertion and deletion from both front and rear.
Deque is also an interface in java.util.
Iterable
└── Collection
└── Queue
└── Deque
├── LinkedList
└── ArrayDeque
Insertions
addFirst(e) → Inserts at frontaddLast(e) → Inserts at rearofferFirst(e) → Inserts at front (safe)offerLast(e) → Inserts at rear (safe)Removals
removeFirst() → Removes first element (exception if empty)removeLast() → Removes last (exception if empty)pollFirst() → Removes first element (null if empty)pollLast() → Removes last (null if empty)Access / Peeking
getFirst() → Gets first element (exception if empty)getLast() → Gets last (exception if empty)peekFirst() → Gets first element (null if empty)peekLast() → Gets last (null if empty)
1. ArrayDeque
2. LinkedList
Example: Deque Using ArrayDeque
Deque<String> deque = new ArrayDeque<>();
deque.addFirst("A");
deque.addLast("B");
deque.addLast("C");
System.out.println(deque.pollFirst()); // A
System.out.println(deque.pollLast()); // C
| Feature | Queue | Deque |
|---|---|---|
| Order | FIFO | FIFO + LIFO |
| Insert | Rear | Both ends |
| Remove | Front | Both ends |
| Flexibility | Limited | Very flexible |
| Best Implementation | LinkedList / PriorityQueue / ArrayDeque | ArrayDeque |
Use Queue for simple FIFO tasks.
Use Deque when you need more powerful two-ended operations.