# Java PriorityQueue Class Example

In Java, the `PriorityQueue` class is implemented as a priority heap. Heap is an important data structure in computer science. For a quick overview of heap, here is a very good tutorial.

1. Simple Example

The following examples shows the basic operations of PriorityQueue such as offer(), peek(), poll(), and size().

```import java.util.Comparator; import java.util.PriorityQueue;   public class PriorityQueueTest {   static class PQsort implements Comparator<Integer> {   public int compare(Integer one, Integer two) { return two - one; } }   public static void main(String[] args) { int[] ia = { 1, 10, 5, 3, 4, 7, 6, 9, 8 }; PriorityQueue<Integer> pq1 = new PriorityQueue<Integer>();   // use offer() method to add elements to the PriorityQueue pq1 for (int x : ia) { pq1.offer(x); }   System.out.println("pq1: " + pq1);   PQsort pqs = new PQsort(); PriorityQueue<Integer> pq2 = new PriorityQueue<Integer>(10, pqs); // In this particular case, we can simply use Collections.reverseOrder() // instead of self-defined comparator for (int x : ia) { pq2.offer(x); }   System.out.println("pq2: " + pq2);   // print size System.out.println("size: " + pq2.size()); // return highest priority element in the queue without removing it System.out.println("peek: " + pq2.peek()); // print size System.out.println("size: " + pq2.size()); // return highest priority element and removes it from the queue System.out.println("poll: " + pq2.poll()); // print size System.out.println("size: " + pq2.size());   System.out.print("pq2: " + pq2);   } }```

Output:

```pq1: [1, 3, 5, 8, 4, 7, 6, 10, 9]
pq2: [10, 9, 7, 8, 3, 5, 6, 1, 4]
size: 9
peek: 10
size: 9
poll: 10
size: 8
pq2: [9, 8, 7, 4, 3, 5, 6, 1]
```

2. Example of Solving Problems Using PriorityQueue

Merging k sorted list.

Category >> Collections
If you want someone to read your code, please put the code inside <pre><code> and </code></pre> tags. For example:
```<pre><code>
String foo = "bar";
</code></pre>
```
• ryanlr

“Compares its two arguments for order. Returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second.”

(second-first) is equivalent to -(first-second). Consider the following node(ascending order), see if it helps.

if (first == second)
return 0;
else if (first > second)
return 1;
else
return -1;

• omi

public int compare(Integer one, Integer two) {
return two – one;
}
how this is reversing??what is the logic behind?

• Pingback: 面试最常用的10大算法 | 上官()

• vikrant

another link on tech forum: http://www.writeulearn.com/priority-queue/

• Pingback: Lut0 » 代码面试最常用的10大算法-CSDN.NET()

• ryanlr

From Java Doc –
Comparators can be passed to a sort method (such as Collections.sort or Arrays.sort) to allow precise control over the sort order. Comparators can also be used to control the order of certain data structures (such as sorted sets or sorted maps), or to provide an ordering for collections of objects that don’t have a natural ordering.

• deepu venkat

Why do we use comparator?