PriorityQueue 详解

PriorityQueue 使用跟普通队列一样,唯一区别是 PriorityQueue 会根据排序规则决定谁在队头,谁在队尾。
往队列中添加可比较的对象 String :

import java.util.PriorityQueue;

public class Main {
    public static void main(String[] args) {
        PriorityQueue<Integer> q = new PriorityQueue<Integer>();
        //入列
        q.add(3);
        q.add(5);
        q.add(10);
        q.add(7);
        q.add(9);
        q.add(15);
        q.add(11);
        q.add(13);
        q.add(20);
        q.add(12);

        //出列
        System.out.println(q.poll());  //1
        System.out.println(q.poll());  //2
        System.out.println(q.poll());  //3
        System.out.println(q.poll());  //4
        System.out.println(q.poll());  //5
        System.out.println(q.poll());  //1
        System.out.println(q.poll());  //2
        System.out.println(q.poll());  //3
        System.out.println(q.poll());  //4
        System.out.println(q.poll());  //5

    }
}

观察打印结果,也是说出列时做了相关判断,将最小的值返回。默认情况下 PriorityQueue 使用自然排序法,最小元素先出列。

我们画一个图去演示查看一下:

在 idea 中调试去查看变量信息:

堆的数组存储要去掌握的,在 idea 编辑器中的存储与实际画图的数组结构相同的。