PriorityQueue的内部排序

Gan*_*ira 5 java collections priority-queue

我无法理解正在发生的内部排序PriorityQueue

import java.util.*;

public class TryME {
    public static void main(String args[]) {
        PriorityQueue<Integer> q = new PriorityQueue<Integer>();
        q.add(3);
        System.out.print(q);
        System.out.print("");
        q.add(1);
        System.out.print(q);
        System.out.print("");
        q.add(9);
        System.out.print(q);
        System.out.print("");
        q.add(6);
        System.out.print(q);
        System.out.print("");
        q.add(2);
        System.out.print(q);
        System.out.print("");
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

[3][1, 3][1, 3, 9][1, 3, 9, 6][1, 2, 9, 6, 3]
Run Code Online (Sandbox Code Playgroud)

这种排序是在什么基础上进行的?

JB *_*zet 2

javadoc说:

此类及其迭代器实现了 Collection 和 Iterator 接口的所有可选方法。iterator() 方法中提供的迭代器不保证以任何特定顺序遍历优先级队列的元素。如果需要有序遍历,请考虑使用 Arrays.sort(pq.toArray())。

如果你执行

while (!q.isEmpty()) {
    System.out.println(q.poll());
}
Run Code Online (Sandbox Code Playgroud)

您将看到元素确实已正确排序。