1、接口设计
优先级队列也是一个队列,所以接口设计如下:
public class PriorityQueue<E> {
// 元素的数量
public int size() ;
// 是否为空
public boolean isEmpty() ;
// 清空
public void clear() ;
// 队尾入队
public void enQueue(E element) ;
// 队头出队
public E deQueue() ;
// 获取队首元素
public E front() ;
}
普通的队列是FIFO元素,先进先出,而优先级队列是按照优先级高低进行出队的,比如将优先级高的元素作为队头元素出队。
根据这个性质,可以使用完全二叉堆进行实现。使用Comparator来定义优先级的高低。
public class PriorityQueue<E> {
private BinaryHeap<E> heap;
public PriorityQueue() {
this(null);
}
public PriorityQueue(Comparator<E> comparator) {
heap = new BinaryHeap<>(comparator);
}
// 元素的数量
public int size() {
return heap.size();
}
// 是否为空
public boolean isEmpty() {
return heap.isEmpty();
}
// 清空
public void clear() {
heap.clear();
}
// 队尾入队
public void enQueue(E element) {
heap.add(element);
}
// 队头出队
public E deQueue() {
return heap.remove();
}
// 获取队首元素
public E front() {
return heap.get();
}
}
网友评论