1. 优先队列的定义:普通队列是先进先出,后进后出。而优先队列的出队顺序和入队顺序无关,和优先级相关。因此优先队列可以通过最大堆在底层进行实现,但其本质还是队列。
2. 优先队列的常见应用: 任务管理器中:动态选择优先级最高的任务执行;游戏中:塔防优先攻击(距离,威胁,先后)。
3. 优先队列的实现:
//定义优先队列
/*
* 优先队列是通过优先级高低来入对 出队等操作的
* 因此我们底层使用最大堆来实现优先队列
* 父节点的优先级必须大于左右子节点的优先级
*/
public class PriorityQueue<E extends Comparable<E>> implements Queue<E>{
MaxHeap<E> heap = new MaxHeap<E>();
//获取优先队列中的有效元素的个数
@Override
public int size() {
return heap.size();
}
//判断优先队列是否为空
@Override
public boolean isEmpty() {
return heap.isEmpty();
}
//向优先队列中添加元素
@Override
public void offer(E element) {
heap.add(element);
}
//将优先队列中优先级最大的元素出队
@Override
public E poll() {
return heap.extractMax();
}
//查看优先队列中优先级最大元素
@Override
public E element() {
return heap.findMax();
}
//清空优先队列
@Override
public void clear() {
heap.clear();
}
//规定优先队列的输出格式
@Override
public String toString() {
return heap.toString();
}
//迭代优先队列
@Override
public Iterator<E> iterator() {
return heap.iterator();
}
}