优先级队列默认最小值优先吗_低优先级队列要等几局

优先级队列默认最小值优先吗_低优先级队列要等几局1.优先级队列是什么??首先,优先级队列是一个队列,队列所有的性质,它也有。其次,优先级队列每次取出的是优先级最高的元素。优先级队列的内部是用堆来维护的。将优先级最高的排在前面。2.什么时候用这个队列呢??看完优先级队列的定义,好像看懂了,又好像没看懂。这队列,什么用它呢?1)排序的对象和排序时比较的对象常见的排序方法(插入、快排等),排序的对象和比较的对象是一样的,根据数本身的大小进行排序。优先级队列可以对排序对象和比较对象相同的进行排序,也可以对排序的对象和排序时比较的对象不同的

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

1. 优先级队列是什么??

首先,优先级队列是一个队列,队列所有的性质,它也有。

其次,优先级队列每次取出的是优先级最高的元素。

优先级队列的内部是用来维护的。将优先级最高的排在前面。

2. 什么时候用这个队列呢??

看完优先级队列的定义,好像看懂了,又好像没看懂。这队列,什么用它呢?

1)排序的对象和排序时比较的对象

常见的排序方法(插入、快排等),排序的对象和比较的对象是一样的,根据数本身的大小进行排序。

优先级队列可以对排序对象和比较对象相同的进行排序,也可以对 排序的对象和排序时比较的对象不同 的进行排序。

排序的对象和排序时比较的对象不同的一种情况是对 Map 排序。 在 Map 中,按照值 ValueKey 进行排序。这时,排序的对象是 Key ,比较的对象是 Value

2)堆

优先级队列的内部是用来维护的。所以,也可以把优先级队列当做堆来用。需要用堆的时候,用优先级队列试试看。

3. 对一数组排序

int[] arr = { 
   3, 7, 5, 1, 8};
PriorityQueue<Integer> queue = new PriorityQueue<>();
for (int t : arr) { 
   
    queue.offer(t);
    System.out.println("queue = " + queue);
}

输出结果:

queue = [3]
queue = [3, 7]
queue = [3, 7, 5]
queue = [1, 3, 5, 7]
queue = [1, 3, 5, 7, 8]

queue = [3, 7, 5] 可以看出,在排序时,queue 虽然也是按照整数的自然序来排的,但是不是按照递增的顺序(队列中的元素并不是一直是递增排列),是按堆存放的。

下面,将优先级队列的大小设置为3,看一下优先级队列的变化

int[] arr = { 
   3, 7, 5, 1, 8};
PriorityQueue<Integer> queue = new PriorityQueue<>();
for (int cur : arr) { 
   
    queue.offer(cur);
    if (queue.size() > 3){ 
   
        int t = queue.poll();
        System.out.print("poll = " + t);
    }
    System.out.println("queue = " + queue);
}

输出结果:

queue = [3]
queue = [3, 7]
queue = [3, 7, 5]
poll = 1 queue = [3, 7, 5]
poll = 3 queue = [5, 7, 8]

从结果中可以看出,每次弹出的是最小的值。

4. Map 按值排序

有两种方案实现 Map 根据值 Value 对键 Key 排序:

  • 队列中存 key
  • 队列中存 Map.entry

4.1 队列中存 key

Map<Integer, Integer> map = new HashMap<>();
// map 中存入值,这里不再写

// 创建优先级队列,同时定义比较规则
PriorityQueue<Integer> queue = new PriorityQueue<>(new Comparator<Integer>(){ 
   
    public int compare(Integer a, Integer b) { 
   
        return map.get(a) - map.get(b);  // 按值 Value 升序排
    }
});

// 加入队列,并排序
for (Integer key: map.keySet()) { 
   
    queue.offer(key);  // 加入队列的同时,会排序
}

/*************************************************************************/
// 创建优先级队列时,还可以简化为下面的方式
PriorityQueue<Integer> queue = new PriorityQueue<>((a, b) -> { 
   
    return map.get(a) - map.get(b);
});

4.2 队列中存 Map.entry

Map 中的 <key,value> 看作一个整体,通过 Map.entry<> 就可以取出。与上面一种方法的不同就是,把 Integer 变成了 Map.entry<Integer, Integer> ,其他的,暂时没看出来。

Map<Integer, Integer> map = new HashMap<>();
// map 中存入值,这里不再写

// 创建优先级队列,同时定义比较规则
PriorityQueue<Map.entry<Integer, Integer>> queue = new PriorityQueue<>((a, b) -> { 
   
    return a.getValue() - b,getValue();
});

// Set<Map.entry<Integer, Integer>> set = map.entrySet();
// 加入队列,并排序
for (Map.entry<Integer, Integer> entry: map.entrySet()) { 
   
    queue.offer(entry);  // 加入队列的同时,会排序
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/190227.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Android笔记之 文件保存、压缩与清空删除

    Android笔记之 文件保存、压缩与清空删除

    2022年2月1日
    58
  • 微生物组助手——最易学的扩增子、宏基因组分析流程

    微生物组助手——最易学的扩增子、宏基因组分析流程软件简介MicrobiomeHelper开源软件,方便大家分析微生物组数据。不仅提供了多套扩增子、宏基因组的分析流程方案,同时提供了几十个软件间衔接的脚本,可大大提高使用者分析的效率。文章于2017年发表于mSystems。Github项目主页:https://github.com/LangilleLab/microbiome_helpermicrobiomehelp结合不同组…

    2022年5月9日
    44
  • Springboot源码结构预览「建议收藏」

    Springboot源码结构预览「建议收藏」系列文章目录Springboot学习系列一、Springboot源码结构预览二、Springboot运行原理三、Springboot源码流程构造分析四、Springboot运行流程构造分析五、SpringbootWeb应用源码解析文章目录系列文章目录概述二、Springboot源码1.源码获取2.源码调试3.目录结构3.目录结构总结学习目标:学习内容:学习时间:学习产出:概述Springboot源码获取、调试、目录结构、设计理念、整体架构。二、Springboot源码1.源

    2022年6月3日
    34
  • 免费pdf转word在线转换器[通俗易懂]

    免费pdf转word在线转换器[通俗易懂]免费pdf转word在线转换器   在办公环境下如何将PDF转换成Word,是不少上班族普遍需要了解的问题之一。面对上百份需要处理的文档,其实否不用安装专业的PDF转Word转换器,借助免费PDF转Word在线转换器就能轻松帮你搞定PDF转Word问题。  最新发布的迅捷免费pdf转word在线转换器,是目前转换效果最好的转换工具,能够轻松实现批量PDF文件的转换,对于个人或者企业用户来说

    2022年6月12日
    32
  • matlab遗传算法实例求最短路径_遗传算法经典实例

    matlab遗传算法实例求最短路径_遗传算法经典实例Matlab遗传算法实例

    2025年11月4日
    1
  • Python识别图片中的文字「建议收藏」

    Python识别图片中的文字「建议收藏」不知道大家有没有遇到过这样的问题,就是在某个软件或者某个网页里面有一篇文章,你非常喜欢,但是不能复制。或者像百度文档一样,只能复制一部分,这个时候我们就会选择截图保存。

    2022年4月29日
    92

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号