特点
- 不能为null
- 元素可以重复
- 可以只粗打印(每次只打印堆顶)
介绍
- 在实际开发中,不能直接实例化Queue的对象来完成操作,需要实例化其实现类,Queue的实现类是AbstractQueue,AbstractQueue是一个抽象类,开发时需要对其子类进行实例化PriorityQueue进行实例化。
- PriorityQueue使用时需要注意,添加到该队列的数据必须是有序,即对象具备排序的功能,自定义的类需要实现Comparable。
- PriorityQueue,即优先队列。优先队列的作用是能保证每次取出的元素都是队列中权值最小的(Java的优先队列每次取最小元素,C++的优先队列每次取最大元素)。这里牵涉到了大小关系,元素大小的评判可以通过元素本身的自然顺序(natural ordering),也可以通过构造时传入的比较器(Comparator,类似于C++的仿函数).
- Java中PriorityQueue实现了Queue接口,不允许放入null元素;其通过堆实现,具体说是通过完全二叉树(complete binary tree)实现的小顶堆(任意一个非叶子节点的权值,都不大于其左右子节点的权值),也就意味着可以通过数组来作为PriorityQueue的底层实现。