Phase 16 of 20 · Topic 16.4

Queue & Deque: ArrayDeque vs PriorityQueue

1Concept

`ArrayDeque` is a resizable circular array implementing `Deque`. It is faster than `Stack` and `LinkedList` when used as a LIFO stack or FIFO queue. `PriorityQueue` implements a min-heap (or max-heap with custom Comparator), retrieving elements in priority order (O(log N) insert/remove, O(1) peek).

2Architecture Diagram

ArrayDeque (Circular Ring Buffer):
[ Head -> e0 | e1 | e2 | e3 <- Tail ] (No node allocations!)

PriorityQueue (Binary Min-Heap):
         [ Priority 1 ]
          /          \
   [ Priority 4 ]  [ Priority 2 ]

3Code Example

Core Java
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.PriorityQueue;
import java.util.Queue;

public class QueueDequeDemo {
    public static void main(String[] args) {
        // High-speed FIFO Queue / LIFO Stack
        Deque<String> stack = new ArrayDeque<>();
        stack.push("Step 1");
        stack.push("Step 2");
        System.out.println("ArrayDeque LIFO Pop: " + stack.pop());

        // PriorityQueue (Min-Heap based on natural order)
        Queue<Integer> taskQueue = new PriorityQueue<>();
        taskQueue.add(50);
        taskQueue.add(10); // Lowest number = highest priority
        taskQueue.add(30);

        System.out.println("PriorityQueue Highest Priority: " + taskQueue.poll());
    }
}

4Expected Output

ArrayDeque LIFO Pop: Step 2
PriorityQueue Highest Priority: 10

5Key Takeaways

  • Always use `ArrayDeque` instead of the legacy `java.util.Stack` class (which has synchronized overhead).
  • PriorityQueue does NOT guarantee FIFO ordering for elements with equal priority.
  • ArrayDeque does not accept null elements.