通过最大堆的底层实现优先队列是极其容易的,几乎所有的接口都可以直接复用。
队列接口
Queue.java
// 队列接口支持泛型
public interface Queue<E> {
void enqueue(E e); // 入队
E dequeue(); // 出队
E getFront(); // 查看队首
int getSize(); // 查看大小
boolean isEmpty(); // 是否为空
}
优先队列
在这里使用的底层二叉堆是《基于动态数组实现二叉堆》中实现的MaxHeap类
PriorityQueue.java
public class PriorityQueue<E extends Comparable<E>> implements Queue<E> {
private MaxHeap<E> maxHeap;
public PriorityQueue() {
maxHeap = new MaxHeap<>();
}
@Override
public int getSize() {
return maxHeap.size();
}
@Override
public boolean isEmpty() {
return maxHeap.isEmpty();
}
@Override
public E getFront() {
return maxHeap.findMax();
}
@Override
public void enqueue(E e) {
maxHeap.add(e);
}
@Override
public E dequeue() {
return maxHeap.extractMax();
}
}