首页 > 编程知识 正文

java三种队列详解,优先级队列用什么排序

时间:2023-05-05 15:13:13 阅读:30238 作者:3722

优先级队列也是队列,因此还提供以下接口

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 ); }为了参考,脚踏两条船的安装代码点将在此进入

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。