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 编辑器中的存储与实际画图的数组结构相同的。