Java PriorityQueue comparator() Method



Description

The Java PriorityQueue comparator() method returns the comparator used to order the elements in this queue.

Declaration

Following is the declaration for java.util.PriorityQueue.comparator() method.

public Comparator<? super E> comparator()

Parameters

NA

Return Value

  • The method call returns the comparator used to order this queue, or null if this queue is sorted according to the natural ordering of its elements.

Exception

NA

Using a Custom Comparator in PriorityQueue of Ints Example

The following example shows the usage of Java PriorityQueue comparator() method to get a relevant comparator. We're adding couple of Integers to the PriorityQueue object using add() method calls per element and then print each element to show the elements added and the comparator used.

package com.tutorialspoint;

import java.util.Comparator;
import java.util.PriorityQueue;

public class PriorityQueueDemo {
   public static void main(String[] args) {
      
      // create an empty priority queue with an initial capacity
      PriorityQueue<Integer> queue = new PriorityQueue<>(5, new IntComparator());

      // use add() method to add elements in the queue
      queue.add(20);
      queue.add(30);
      queue.add(20);
      queue.add(30);
      queue.add(15);
      queue.add(22);
      queue.add(11);

      // let us print all the elements available in queue
      for (Integer number : queue) {
         System.out.println("Number = " + number);
      }
      
      System.out.println("Comparator = " + queue.comparator());
   }
}

class IntComparator implements Comparator<Integer>{

   @Override
   public int compare(Integer o1, Integer o2) {
      return o1 - o2;
   }	
}

Output

Let us compile and run the above program, this will produce the following result −

Number = 11
Number = 20
Number = 15
Number = 30
Number = 30
Number = 22
Number = 20
Comparator = com.tutorialspoint.IntComparator@5315b42e

Using a Custom Comparator in PriorityQueue of Strings Example

The following example shows the usage of Java PriorityQueue comparator() method to get a relevant comparator. We're adding couple of Strings to the PriorityQueue object using add() method calls per element and then print each element to show the elements added and the comparator used.

package com.tutorialspoint;

import java.util.Comparator;
import java.util.PriorityQueue;

public class PriorityQueueDemo {
   public static void main(String[] args) {
      
      // create an empty priority queue
      PriorityQueue<String> queue = new PriorityQueue<>(new StringComparator());

      // use add() method to add elements in the queue
      queue.add("Welcome");
      queue.add("To");
      queue.add("Tutorialspoint");
      System.out.println("PriorityQueue = " + queue);   
      
      System.out.println("Comparator = " + queue.comparator());
   }
}
class StringComparator implements Comparator<String>{
   @Override
   public int compare(String o1, String o2) {
      return o1.compareTo(o2);
   }
}

Output

Let us compile and run the above program, this will produce the following result −

PriorityQueue = [To, Welcome, Tutorialspoint]
Comparator = com.tutorialspoint.StringComparator@5315b42e

Using a Custom Comparator in PriorityQueue of Objects Example

The following example shows the usage of Java PriorityQueue comparator() method to get a relevant comparator. We're adding couple of Student objects to the PriorityQueue object using add() method calls per element and then print each element to show the elements added and the comparator used.

package com.tutorialspoint;

import java.util.Comparator;
import java.util.PriorityQueue;

public class PriorityQueueDemo {
   public static void main(String[] args) {

      // create an empty priority queue
      PriorityQueue<Student> queue = new PriorityQueue<>(new RollNoComparator());

      // use add() method to add elements in the queue
      queue.add(new Student(1, "Julie"));
      queue.add(new Student(2, "Robert"));
      queue.add(new Student(3, "Adam"));
      System.out.println("PriorityQueue = " + queue);   
      
      System.out.println("Comparator = " + queue.comparator());
   }
}

class Student {
   int rollNo;
   String name;

   Student(int rollNo, String name){
      this.rollNo = rollNo;
      this.name = name;
   }

   @Override
   public String toString() {
      return "[ " + this.rollNo + ", " + this.name + " ]";
   }
   
   @Override
   public boolean equals(Object obj) {
      Student s = (Student)obj;
      return this.rollNo == s.rollNo && this.name.equalsIgnoreCase(s.name);
   }
}

class RollNoComparator implements Comparator<Student>{

   @Override
   public int compare(Student o1, Student o2) {
      return o1.rollNo - o2.rollNo;
   }
}

Output

Let us compile and run the above program, this will produce the following result −

PriorityQueue = [[ 1, Julie ], [ 2, Robert ], [ 3, Adam ]]
Comparator = com.tutorialspoint.RollNoComparator@2ef9b8bc
java_util_priorityqueue.htm
Advertisements