优先队列就是在队列的基础上增加优先级的比较。在操作系统进行进程/线程调度算法中即用到了优先队列。
比如去医院看病,大家都要排队,但是如果病情非常严重的人肯定不需要排队了,可以直接救治,因为其优先级更高。
优先队列用堆来实现非常方便。因为将元素添加到堆中以后,堆的头节点总是值最大的那个(按Comparable的compareTo方法进行比较),如果
在实现类的comparaTo方法中按照优先级来比较,那么堆中的头节点就是优先级最高的那个。删掉这个最高优先级的节点后,堆会自动调整,将剩余
节点中优先级最高的调整到头节点。
//优先队列,由堆实现(堆的实现参加另外一篇文章)
public class PriorityQuene <T extends Comparable>{
private Heap<T> heap;
public PriorityQuene(){
heap=new Heap<T>();
}
//添加到优先队列
public void enqueue(T t){
heap.add(t);
}
//删除并返回当前队列中优先级最高的元素
public T dequeue(){
return heap.remove();
}
public int Size(){
return heap.Size();
}
}