A Priority Queue is a special type of queue where each element has a priority. Elements with higher priority are served before elements with lower priority, unlike a normal queue which follows first-in-first-out order.
Click to reveal answer
beginner
How does a Priority Queue decide which element to remove first?
It removes the element with the highest priority first. If two elements have the same priority, the order depends on the implementation but often the one inserted earlier is removed first.
Click to reveal answer
intermediate
Which data structure is commonly used to implement a Priority Queue efficiently?
A heap (usually a binary heap) is commonly used because it allows quick access to the highest priority element and efficient insertion and removal.
Click to reveal answer
beginner
What is the difference between a Priority Queue and a normal Queue?
A normal Queue serves elements in the order they arrive (FIFO). A Priority Queue serves elements based on priority, not arrival order.
Click to reveal answer
beginner
In Java, which interface and class are commonly used for Priority Queues?
The PriorityQueue class implements the Queue interface and provides a priority queue implementation in Java.
Click to reveal answer
What element does a Priority Queue remove first?
AThe element with the lowest priority
BThe element that was added first
CA random element
DThe element with the highest priority
✗ Incorrect
A Priority Queue always removes the element with the highest priority first.
Which data structure is most efficient for implementing a Priority Queue?
AHeap
BLinked List
CArray
DStack
✗ Incorrect
A heap allows efficient insertion and removal of the highest priority element.
In Java, which class provides a Priority Queue implementation?
AArrayList
BLinkedList
CPriorityQueue
DHashMap
✗ Incorrect
The PriorityQueue class in Java implements a priority queue.
What is the main difference between a Priority Queue and a normal Queue?
APriority Queue serves elements by priority, normal Queue uses FIFO
BNormal Queue serves elements by priority
CPriority Queue uses FIFO order
DThere is no difference
✗ Incorrect
Priority Queue serves elements based on priority, normal Queue serves elements in order of arrival.
If two elements have the same priority in a Priority Queue, what usually happens?
AThe one inserted last is removed first
BThe one inserted first is removed first
CBoth are removed at the same time
DThe queue crashes
✗ Incorrect
Usually, if priorities are equal, the element inserted earlier is removed first, but this depends on implementation.
Explain what a Priority Queue is and how it differs from a normal Queue.
Think about how elements are chosen to be removed.
You got /3 concepts.
Describe how a Priority Queue can be implemented efficiently and why that method is chosen.
Consider a tree-like structure that keeps the highest priority element at the top.
You got /3 concepts.
Practice
(1/5)
1. What is the main characteristic of a Priority Queue compared to a regular queue?
easy
A. Elements are dequeued based on their priority, not just order of insertion
B. Elements are always dequeued in the order they were inserted
C. It only stores elements of the same value
D. It does not allow duplicate elements
Solution
Step 1: Understand queue behavior
A regular queue removes elements in the order they were added (FIFO).
Step 2: Understand priority queue behavior
A priority queue removes elements based on priority, not insertion order.
Final Answer:
Elements are dequeued based on their priority, not just order of insertion -> Option A
Quick Check:
Priority Queue = Priority-based removal [OK]
Hint: Priority queue removes highest priority first, not oldest [OK]
Common Mistakes:
Confusing priority queue with FIFO queue
Thinking priority queue sorts elements permanently
Assuming duplicates are not allowed
2. Which of the following is the correct way to declare a Priority Queue of integers in Java?
easy
A. PriorityQueue<int> pq = new PriorityQueue<>();
B. PriorityQueue<Integer> pq = new PriorityQueue<>();
C. PriorityQueue pq = new PriorityQueue<int>();
D. PriorityQueue<Integer> pq = new PriorityQueue<int>();
Solution
Step 1: Use wrapper class for generics
Java generics require wrapper classes, so use Integer, not int.
Step 2: Correct generic syntax
Use diamond operator <> on the right side without type inside.
Final Answer:
PriorityQueue<Integer> pq = new PriorityQueue<>(); -> Option B
Quick Check:
Use wrapper Integer and diamond operator [OK]
Hint: Use wrapper classes (Integer) with generics, not primitives [OK]
Common Mistakes:
Using primitive types (int) with generics
Specifying type twice on right side
Not using diamond operator
3. What will be the output of the following Java code?
import java.util.*;
public class TestPQ {
public static void main(String[] args) {
PriorityQueue<Integer> pq = new PriorityQueue<>();
pq.add(30);
pq.add(10);
pq.add(20);
System.out.print(pq.poll() + ", " + pq.poll() + ", " + pq.poll());
}
}
medium
A. 10, 20, 30
B. 30, 20, 10
C. 20, 10, 30
D. 10, 30, 20
Solution
Step 1: Understand PriorityQueue default order
Java's PriorityQueue by default is a min-heap, so smallest element is removed first.
Step 2: Trace poll() calls
Elements added: 30, 10, 20. Poll removes 10, then 20, then 30.
Final Answer:
10, 20, 30 -> Option A
Quick Check:
Min-heap poll order = 10, 20, 30 [OK]
Hint: PriorityQueue.poll() returns smallest element first by default [OK]
Common Mistakes:
Assuming insertion order is preserved
Thinking PriorityQueue is max-heap by default
Confusing poll() with peek()
4. Identify the error in the following code snippet that uses a Priority Queue in Java:
import java.util.PriorityQueue;
public class Demo {
public static void main(String[] args) {
PriorityQueue pq = new PriorityQueue();
pq.add("apple");
pq.add(10);
System.out.println(pq.poll());
}
}
medium
A. PriorityQueue requires initial capacity in constructor
B. PriorityQueue must be imported from java.util.concurrent package
C. PriorityQueue cannot mix different data types like String and Integer
D. PriorityQueue does not support add() method
Solution
Step 1: Check PriorityQueue type safety
Without generics, PriorityQueue stores Objects but cannot compare different types.
Step 2: Mixing String and Integer causes ClassCastException
Adding both String and Integer causes runtime error when ordering elements.
Final Answer:
PriorityQueue cannot mix different data types like String and Integer -> Option C
Quick Check:
Mixed types cause runtime error in PriorityQueue [OK]
Hint: PriorityQueue elements must be mutually comparable [OK]
Common Mistakes:
Ignoring type safety and mixing types
Wrong import statement
Assuming add() method is unsupported
5. You want to create a Priority Queue in Java that always returns the largest element first. Which of the following is the best way to achieve this?
hard
A. Use PriorityQueue<Integer> pq = new PriorityQueue<>(); and add elements normally
B. Use PriorityQueue<Integer> pq = new PriorityQueue<>(null);
C. Use PriorityQueue<Integer> pq = new PriorityQueue<>(Comparator.naturalOrder());
D. Use PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
Solution
Step 1: Understand default PriorityQueue order
By default, PriorityQueue is a min-heap, so smallest element is returned first.
Step 2: Use reverse order comparator for max-heap behavior
Passing Collections.reverseOrder() makes it return largest element first.
Final Answer:
PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder()); -> Option D
Quick Check:
Reverse order comparator = max-heap PriorityQueue [OK]
Hint: Use Collections.reverseOrder() to get max element first [OK]