Skip to main content

The Queue Interface

The Queue interface extends the Collection interface. It is used to hold elements about to be processed and typically orders elements in a FIFO (First-In-First-Out) manner.

However, Java also provides the Deque (Double Ended Queue) interface, which extends Queue and allows elements to be inserted and removed from both ends.


Queue Operations​

Unlike standard collections, Queues have specific methods for insertion, removal, and inspection. These methods exist in two forms: one throws an exception if the operation fails, and the other returns a special value (like null or false).

OperationThrows ExceptionReturns Special Value
Insertadd(e)offer(e)
Removeremove()poll()
Examineelement()peek()

1. PriorityQueue​

The PriorityQueue class is a popular implementation of the Queue interface. It is not a standard FIFO queue. Instead, elements are ordered based on their natural ordering (like TreeSet), or by a custom Comparator provided at queue construction time.

  • The head of this queue is the "least" element with respect to the specified ordering.
  • It does not allow null elements.

Example​

import java.util.PriorityQueue;
import java.util.Queue;

public class LabQueue1 {

public static void main(String args[]) {
// A PriorityQueue of Integers
Queue<Integer> pq = new PriorityQueue<>();

// Adding elements out of order
pq.offer(50);
pq.offer(10);
pq.offer(30);

System.out.println("Head of queue (smallest element): " + pq.peek()); // 10

// Removing elements. They will be removed in sorted order!
System.out.println("Processing: " + pq.poll()); // 10
System.out.println("Processing: " + pq.poll()); // 30
System.out.println("Processing: " + pq.poll()); // 50
}
}

2. ArrayDeque​

The ArrayDeque class implements the Deque interface. It uses a resizable array and allows you to operate on both the head and the tail of the queue.

  • It is significantly faster than Stack when used as a stack (LIFO).
  • It is significantly faster than LinkedList when used as a queue (FIFO).
  • It does not allow null elements.

Example (Using ArrayDeque as a FIFO Queue)​

import java.util.ArrayDeque;
import java.util.Deque;

public class LabQueue2 {

public static void main(String args[]) {
Deque<String> deque = new ArrayDeque<>();

// Adding to the tail
deque.offer("Customer 1");
deque.offer("Customer 2");
deque.offer("Customer 3");

// Removing from the head (FIFO behavior)
System.out.println("Served: " + deque.poll()); // Customer 1
System.out.println("Next in line: " + deque.peek()); // Customer 2
}
}