Java Deque Interface
Learn Java through interactive, bite-sized lessons. Practice with real code challenges and build applications.
Start Java Journey →The Deque interface in Java is a powerful and versatile data structure that extends the Queue Interface. It represents a double-ended queue, allowing elements to be added or removed from both ends.
What is a Deque?
A Deque (pronounced "deck") is an acronym for Double Ended Queue. It supports element insertion and removal at both ends, making it a flexible choice for various scenarios in Java programming.
Key Features of Deque
- Supports both stack and queue operations
- Allows null elements (implementation dependent)
- No fixed capacity restrictions
- Thread-safe implementations available
Common Deque Methods
| Operation | First Element (Head) | Last Element (Tail) |
|---|---|---|
| Insert | addFirst(e), offerFirst(e) | addLast(e), offerLast(e) |
| Remove | removeFirst(), pollFirst() | removeLast(), pollLast() |
| Examine | getFirst(), peekFirst() | getLast(), peekLast() |
Implementing Deque
Java provides two main implementations of the Deque interface:
- ArrayDeque: Resizable-array implementation, not thread-safe
- LinkedList: Doubly-linked list implementation, not thread-safe
Example: Using ArrayDeque
import java.util.ArrayDeque;
import java.util.Deque;
public class DequeExample {
public static void main(String[] args) {
Deque<String> deque = new ArrayDeque<>();
// Adding elements
deque.addFirst("First");
deque.addLast("Last");
deque.offerFirst("New First");
System.out.println(deque); // Output: [New First, First, Last]
// Removing elements
String first = deque.removeFirst();
String last = deque.pollLast();
System.out.println("Removed: " + first + ", " + last);
System.out.println(deque); // Output: [First]
}
}
Use Cases for Deque
Deques are particularly useful in scenarios where you need:
- Implementing both stack and queue behaviors
- Managing work stealing algorithms
- Implementing undo functionality
- Palindrome checking
Performance Considerations
When choosing between ArrayDeque and LinkedList, consider:
- ArrayDeque is generally faster for add and remove operations
- LinkedList performs better for insertion in the middle of the list
- ArrayDeque uses less memory than LinkedList for storing the same number of elements
Conclusion
The Java Deque interface provides a flexible and efficient way to work with double-ended queues. By understanding its methods and implementations, you can leverage its power in your Java applications, enhancing your ability to manage complex data structures effectively.
For more advanced Java concepts, explore Java Multithreading or Java Generics.