优先队列是什么?
优先级队列并不是像普通普通的队列那样永远遵从先进先出, 而是有优先级的, 出队时让优先级高的先出队,底层使用的是堆。
创建方式
方式一、lambda表达式
PriorityQueue<Integer> queue = new PriorityQueue<>(
(o1, o2) -> o2 - o1
);
方式二、重写compare方法
PriorityQueue<Integer> queue = new PriorityQueue<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});
2、实现自定义排序
示例一、按字符串的第三位进行降序排列
PriorityQueue<String> queue = new PriorityQueue<>(
(o1, o2) -> o2.charAt(2) - o1.charAt(2)
);
二、常用方法总结
add(); 队尾插入元素,调整堆结构,失败时抛异常
offer(); 队尾插入元素,调整堆结构,失败时抛false
remove(); 根据value值删除指定元素,调整堆结构,失败时抛异常
poll(); 删除队头元素,调整堆结构,失败时抛null
element(); 获取队列头元素
peek(); 获取队列头元素
clear(); 清空队列
size(); 获取队列元素个数
contains(); 判断队列中是否包含指定元素
isEmpty(); 判断队列是否为空