7

I have a java program which goes like this

public class PriorityQueueExample {

public static void main(String[] args) {
    PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
    pq.add(10);
    pq.add(1);
    pq.add(9);
    pq.add(2);
    pq.add(8);
    pq.add(3);
    pq.add(7);
    pq.add(4);
    pq.add(6);
    pq.add(5);
System.out.println(pq);

}

}

My Question is why does not the priority queue sort them. As per the java specs it implements comparable and maintains the sorting order(natural sorting)

My output of the program is as follows : [1, 2, 3, 4, 5, 9, 7, 10, 6, 8]

3 Answers 3

7

It is sorted, but internally the elements are stored in a heap. If you call peek(), poll(), or remove(), you will get the right order (and that's how you access queues).

Sign up to request clarification or add additional context in comments.

Comments

7

Insertion into a priority queue is not enough to sort a list of elements, since it doesn't store them in sorted order; it stores them in the partially sorted heap order. You have to remove the elements in a loop to sort them:

while (pq.size() > 0)
    System.out.println(pq.remove());

Comments

0

poll() and remove() will give sorted order not peek() as per java8.

 PriorityQueue<Integer> pq = new PriorityQueue<Integer>();
    pq.add(10);
    pq.add(1);
    pq.add(9);
    pq.add(2);
    pq.add(8);
    pq.add(3);
    pq.add(7);
    pq.add(4);
    pq.add(6);
    pq.add(5);
        // Remove items from the Priority Queue (DEQUEUE)
        while (!pq.isEmpty()) {
          //  System.out.println(pq.remove());
          System.out.println(pq.poll());
        }
Output for poll() & remove():
1 
2
3 
4 
5 
6 
7 
8 
9 
10
output for peek():
1
1
1
1
1
1
1
1
1
1

1 Comment

code example is more needed here. Please add it in context. (End of Low_Quality Review).

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.