底层结构
Java中PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示。PriorityQueue是非线程安全的,Java提供了PriorityBlockingQueue用于Java多线程环境。
功能介绍
优先队列的作用是能保证每次取出的元素都是队列中权值最小的。元素大小的评判可以通过元素本身的自然顺序,也可以通过构造时传入的比较器。
方法
add()
优先队列中插入元素,插入失败时抛出异常。
offer()
优先队列中插入元素,插入失败时返回false
。
element()
获取但不删除队首元素,失败时抛出异常。
peek()
获取但不删除队首元素,失败时返回null
。
remove()
获取并删除队首元素,插入失败时抛出异常。
poll()
获取并删除队首元素,插入失败时返回false
。
代码实例
// 最小优先队列
PriorityQueue<Integer> queue = new PriorityQueue<Integer>(
new Comparator<Integer>(){
@Override
public int compare(Integer num1, Integer num2){
return num1.compareTo(num2);
}
}
);
// 最大优先队列 return num2.compareTo(num1);