Java PriorityQueue comparator() Method

📘 Premium Read: Access my best content on Medium member-only articles — deep dives into Java, Spring Boot, Microservices, backend architecture, interview preparation, career advice, and industry-standard best practices.

🎓 Top 15 Udemy Courses (80-90% Discount): My Udemy Courses - Ramesh Fadatare — All my Udemy courses are real-time and project oriented courses.

▶️ Subscribe to My YouTube Channel (176K+ subscribers): Java Guides on YouTube

▶️ For AI, ChatGPT, Web, Tech, and Generative AI, subscribe to another channel: Ramesh Fadatare on YouTube

In Java, the PriorityQueue class provides the comparator() method to retrieve the comparator used to order the elements in the queue.

Table of Contents

  1. Introduction
  2. comparator Method Syntax
  3. Examples
    • Retrieving the Comparator of a PriorityQueue
    • Handling a Natural Ordering PriorityQueue
  4. Real-World Use Case
    • Use Case: Custom Task Priority
  5. Conclusion

Introduction

The PriorityQueue.comparator() method is used to obtain the comparator that orders the elements in the PriorityQueue. If the queue uses natural ordering, the method returns null. This method is useful when you need to check or use the comparator for custom ordering of elements.

comparator Method Syntax

The syntax for the comparator method is as follows:

public Comparator<? super E> comparator() 
  • The method does not take any parameters.
  • The method returns a Comparator<? super E> that represents the comparator used to order the elements in the queue. If the queue uses natural ordering, it returns null.

Examples

Retrieving the Comparator of a PriorityQueue

The comparator method can be used to retrieve the comparator used by a PriorityQueue.

Example

import java.util.PriorityQueue; import java.util.Comparator; public class PriorityQueueComparatorExample { public static void main(String[] args) { // Creating a custom comparator Comparator<String> customComparator = (s1, s2) -> s2.length() - s1.length(); // Creating a PriorityQueue with a custom comparator PriorityQueue<String> tasks = new PriorityQueue<>(customComparator); // Adding elements to the PriorityQueue tasks.add("Complete project report"); tasks.add("Email client updates"); tasks.add("Prepare presentation"); // Retrieving the comparator used by the PriorityQueue Comparator<? super String> comparator = tasks.comparator(); // Printing the comparator System.out.println("Comparator: " + comparator); } } 

Output:

Comparator: java.util.PriorityQueue$1@<hashcode> 

Handling a Natural Ordering PriorityQueue

When the PriorityQueue uses natural ordering, calling comparator will return null.

Example

import java.util.PriorityQueue; public class NaturalOrderingExample { public static void main(String[] args) { // Creating a PriorityQueue with natural ordering PriorityQueue<String> tasks = new PriorityQueue<>(); // Adding elements to the PriorityQueue tasks.add("Complete project report"); tasks.add("Email client updates"); tasks.add("Prepare presentation"); // Retrieving the comparator used by the PriorityQueue Comparator<? super String> comparator = tasks.comparator(); // Printing the comparator System.out.println("Comparator: " + comparator); } } 

Output:

Comparator: null 

Real-World Use Case

Use Case: Custom Task Priority

In a task management system, you might need to order tasks based on custom criteria, such as task length or priority level. The comparator method can help verify and retrieve the custom comparator used for ordering tasks.

Example

import java.util.PriorityQueue; import java.util.Comparator; public class TaskManagementSystem { public static void main(String[] args) { // Creating a custom comparator for tasks Comparator<Task> taskComparator = (t1, t2) -> Integer.compare(t2.getPriority(), t1.getPriority()); // Creating a PriorityQueue with the custom comparator PriorityQueue<Task> tasks = new PriorityQueue<>(taskComparator); // Adding initial tasks with different priorities tasks.add(new Task("Complete project report", 2)); tasks.add(new Task("Email client updates", 1)); tasks.add(new Task("Prepare presentation", 3)); // Retrieving the comparator used by the PriorityQueue Comparator<? super Task> comparator = tasks.comparator(); // Printing the comparator System.out.println("Comparator: " + comparator); // Processing tasks based on custom priority while (!tasks.isEmpty()) { System.out.println("Processing task: " + tasks.poll()); } } } class Task { private String description; private int priority; public Task(String description, int priority) { this.description = description; this.priority = priority; } public int getPriority() { return priority; } @Override public String toString() { return description + " (Priority: " + priority + ")"; } } 

Output:

Comparator: TaskManagementSystem$1@<hashcode> Processing task: Prepare presentation (Priority: 3) Processing task: Complete project report (Priority: 2) Processing task: Email client updates (Priority: 1) 

Conclusion

The PriorityQueue.comparator() method in Java is used for retrieving the comparator used to order elements in a PriorityQueue.

Comments

Spring Boot 3 Paid Course Published for Free
on my Java Guides YouTube Channel

Subscribe to my YouTube Channel (165K+ subscribers):
Java Guides Channel

Top 10 My Udemy Courses with Huge Discount:
Udemy Courses - Ramesh Fadatare