java中优先级队列,java的优先级队列使用方法

  java中优先级队列,java的优先级队列使用方法

  00-1010 1.优先级队列1.1概念1.2内部原理1.3操作-入口队列1.4操作-出口队列(优先级最高)1.5借用堆实现优先级队列1.6测试

  

目录

 

  00-1010在很多应用中,我们通常需要根据优先级来对待处理的对象进行处理,比如先处理优先级最高的对象,再处理优先级次高的对象。最简单的例子就是在手机上玩游戏,如果有来电,系统应该优先处理来电。在这种情况下,我们的数据结构应该提供两个基本操作,一个是返回最高优先级的对象,另一个是添加一个新的对象。这个数据结构就是优先级队列。

  实现00-1010优先级队列的方法有很多,但最常用的一种是通过堆来构建。

  00-1010流程(以大堆为例):

  1.首先,通过尾部插入将其放入数组。

  2.将堆的值与其父堆的值进行比较。如果双亲的值都很大,则满足堆属性,插入完成。

  3.否则,交换父位置的值,并重复步骤2和3。

  4.直到根节点

  插图:

  00-1010为了防止堆的结构被破坏,在删除的时候不直接删除堆的顶部元素,而是用数组的最后一个元素替换堆的顶部元素,然后通过向下调整来重新调整堆。

  00-1010 1.实现一个接口

  interface que uee {//将void offer(E val)排入队列;//出列E poll();//返回leader元素E peek();//确定队列是否为空布尔值isEmpty();}2.关于堆的完整代码,请参见Java堆优先级队列示例的说明(第1部分)

  3.优先队列

  /* * *基于最大堆的优先级队列,值越高优先级越高*队列头的元素是优先级最高的元素(最大值)*/import stack _ queue . queue . iqueue;public class PriorityQueue实现iqueueeininteger { max heap heap=new max heap();public priority queue(){ heap=new max heap();} @Override public void offer(整数val){ heap . add(val);} @Override公共整数poll(){ return heap . extract max();} @Override公共整数peek(){ return heap . peek max();} @覆盖public boolean isEmpty(){ return heap . isEmpty();}}

  

1.优先级队列

导入Java。util。比较器;导入Java。util。优先级队列;导入Java。util。排队;public class PriorityQueueTest { public static void main(String[]args){//通过构造方法传入比较器//默认是最小堆,值(比较器比较的返回值)越小,优先级就越高//当传入一个降序的比较器时,值(比较器比较的返回值,值越大,返回负数)//queue student queue=新优先级队列(new StudentComDesc());//queue Student queue=新优先级队列(new comparator Student(){//@ Override//public int compare(Student O1,Student O2){//return O2。getage()-O1。getage();//}//});queue student queue=新优先级队列(new student com());学生stu1=新学生(18,雷昊);学生stu2=新学生(20,张超);学生stu3=新生(16,钺浦);排队。offer(stu 1);排队。offer(stu 2);排队。offer(stu 3);而(!排队。isempty()){ system。出去。println(队列。poll());} }} //升序(最小堆)类学生通讯实现比较器学生{ @ Override public int compare(Student O1,Student O2){ return O1。getage()-O2。getage();}} //降序(最大堆)类学生通讯实现比较器Student { @ Override public int compare(Student O1,Student O2){ return O2。getage()-O1。getage();}}类学生{私人年龄私有字符串名称;public int getAge(){ return age;}公学生(int age,String name){ this。年龄=年龄;this.name=name} @将公共字符串重写为String(){ return Student { age= age ,name= name }}结果如下:Java堆优先级队列示例讲解(上)

 

  到此这篇关于爪哇堆优先级队列示例讲解(下)的文章就介绍到这了,更多相关爪哇堆优先级队列内容请搜索盛行信息技术以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行它!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: