通過最大堆的底層實現優先隊列是極其容易的,幾乎所有的接口都可以直接複用。
隊列接口
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();
}
}