优先级队列也是队列,因此还提供以下接口
int size (; //元素的数量
布尔isempty (; //是否为空
语音队列(e element ); //入队
E deQueue (; //离开队伍
E front (; 获取//队列的标头元素
语音清除(; //清空
普通的队列是先进先出的FIFO原则
优先级队列是按照优先级从高到低的顺序退出团队,例如以优先级高的要素为先退出团队
优先队列的底层实现
从优先队列的特征来看,很容易就能直接利用二叉堆作为优先队列的下级来实现
可以在Comparator或Comparable中自定义优先级高低
Java官方的优先级队列priorityQueue底层是用最小堆实现的,详情可以看他的下滤和上滤操作。因此调用其poll方法,返回结果是该队列中最小的元素。如果你自己给他传进去一个比较器,就按照比较器进行优先级比较。
Java官方的一个上滤方法
隐私保护功能(intk,T x,Object[] es ) { Comparable? sper tkey=(可比较? super T ) x; wile(k0 ) intparent=) k-1 ) 1; 对象e=es [ parent ]; if(key.comPareto () t ) e )=0) break; es[k]=e; k=parent; } es[k]=key; } 以下为优先级队列的简单实现(底层使用二叉堆)
package hxsdkn.queue; import java.util.Comparator; //import com.hxsd kn.heap.binary heap; import hxsdkn.heap.BinaryHeap; publicclasspriorityqueuee { privatebinaryheapeheap; publicpriorityqueue (比较器比较器) heap=newbinaryheap (比较器) ); //将比较器传递到两股堆栈(}公共优先级队列) ) this(null ); }public int size () {return heap.size ); }公共布尔isempty () {return heap.isEmpty ); }公共void clear () {heap.clear ); }公共语音编码(element ) HEAP.add ) element ); }公共e dequeue () {return heap.remove ); }公共e front () {return heap.get ); }为了参考,脚踏两条船的安装代码点将在此进入