1.优先级队列概述

PriorityQueue,即优先队列。优先队列的作用是能保证每次取出的元素都是队列中权值最小的(Java的优先队列每次取最小元素,C++的优先队列每次取最大元素)。这里牵涉到了大小关系,元素大小的评判可以通过元素本身的自然顺序(natural ordering),也可以通过构造时传入的比较器(Comparator,类似于C++的仿函数)。

Java中PriorityQueue实现了Queue接口,不允许放入null元素;其通过堆实现,具体说是通过完全二叉树(complete binary tree)实现的小顶堆(任意一个非叶子节点的权值,都不大于其左右子节点的权值),也就意味着可以通过数组来作为PriorityQueue的底层实现。

2.优先级队列的操作方法

栈中的插入和移除数据项的命名一般都是 push、pop,而队列至今没有标准化的命名。插入操作可以用 add、offer等命名,移除操作可以用 poll、remove、等命名,查看队头操作可以用 peek、element等命令
Java中PriorityQueue实现了Queue接口,Queue接口实现了Collection接口,所以PriorityQueue包含了collection接口的add,remove,element方法
在 Java 中,常见的队列操作以及它们的区别如下所示:

操作 方法名 描述
插入 offer 向队列插入元素,在一个满的队列中加入一个新项会返回false
插入 add 向队列插入元素,在一个满的队列中加入一个新项会抛出异常
删除 poll 从队列中删除第一个元素,在队列为空时返回null
删除 remove 从队列中删除第一个元素,在队列为空时会抛出异常
查看队头元素 peek 在队列的头部查询元素,在队列为空时返回null
查看队头元素 element 从队列中删除第一个元素,在队列为空时会抛出异常

3.优先级队列的应用

3.1.最小K个数

3.1.1.问题描述

设计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。
示例:

输入: arr = [1,3,5,7,2,4,6,8], k = 4
输出: [1,2,3,4]

提示:

0 <= len(arr) <= 100000
0 <= k <= min(100000, len(arr))

3.1.2.解题思路及实现代码

我们用一个小根堆(优先级队列)实时维护数组的前 k 小值。首先将数组中的全部元素压入堆中(优先级队列),然后出队k个元素即可,求得最小的k个元素

class Solution {public int[] smallestK(int[] arr, int k) {Queue<Integer> queue=new PriorityQueue<Integer>();      //优先级队列int len=arr.length;for(int i=0;i<len;i++){             //将数组中元素入队queue.offer(arr[i]);}int [] result=new int[k];for(int i=0;i<k;i++){               //出队k个元素result[i]=queue.poll();}return result;}
}

Java优先级队列PriorityQueue相关推荐

  1. Java 优先级队列

    文章目录 Java 优先级队列 PriorityQueue简介 继承关系 PriorityQueue示例 Comparable比较器 Comparable接口 Comparator比较器 Compar ...

  2. 优先级队列PriorityQueue

    优先级队列PriorityQueue 概述 前面以Java ArrayDeque为例讲解了Stack和Queue,其实还有一种特殊的队列叫做PriorityQueue,即优先队列.优先队列的作用是能保 ...

  3. java优先级队列使用

    优先级队列是比栈和队列更专用的结构,在多数情况下都非常有用.优先级队列像普通队列一样,有一个队头和队尾,并且也是从队头移除数据. 优先级队列中,数据按关键词有序排列,插入新数据的时候,会自动插入到合适 ...

  4. 什么是java优先级队列_什么是Java优先级队列(Priority Queue)?

    39 优先级队列中的元素可以按照任意的顺序插入,却总是按照排序的顺序进行检索.无论何时调用remove方法,总会获得当前优先级队列中的最小元素,但并不是对所有元素都排序.它是采用了堆(一个可以自我调整 ...

  5. 优先级队列PriorityQueue在算法问题中的使用

    文章目录 优先级队列介绍 与优先级队列有关的习题 [179. 最大数] [918. 环形子数组的最大和] [1094. 拼车] [264. 丑数 II] 前k个出现频率最高的数字 用优先级队列合并k个 ...

  6. 优先级队列 PriorityQueue

    1. 优先级队列是什么?? 首先,优先级队列是一个队列,队列所有的性质,它也有. 其次,优先级队列每次取出的是优先级最高的元素. 优先级队列的内部是用堆来维护的.将优先级最高的排在前面. 2. 什么时 ...

  7. java优先级队列(堆)

    文章目录 一.优先级队列是什么? 二.堆 什么是堆? 堆的分类: 堆的存储 堆的创建 三.堆的操作 插入元素 弹出元素 四.用堆模拟实现优先级队列 一.优先级队列是什么? 在数据结构中,普通的队列是先 ...

  8. 第十四章第五节:Java集合框架之优先级队列PriorityQueue(堆)

    文章目录 一:堆基本概念 (1)什么是堆 (2)堆存储方式 二:堆的模拟实现 (1)重点操作说明 A:堆的初始化 B:堆的向下调整 C:堆的构造 D:堆的插入 E:堆的删除 (2)代码 三:Prior ...

  9. Java中的PriorityQueue优先级队列

    以前的博客中介绍过队列是一种先进先出(FIFO)的数据结构,但有些情况下,操作的数据可能带有优先级,此时出队列时需要优先级高的元素先出队列,这个时候传统的队列显然不能胜任,Java中有一个新的实现类继 ...

最新文章

  1. cocos2d-x 调色
  2. ibatis 高速缓存
  3. 微机原理——总线和时序
  4. python中oxf2是什么_0x02-StartingPoint-Oopsie
  5. 吴恩达深度学习—— 3.4 多个例子中的向量化
  6. iPhone 12系列被曝量产延期:10月能见到就不错
  7. pom模块依赖关系梳理
  8. 003.ASP.NET MVC集中管理Session
  9. 区块链发展迎来新机遇
  10. MATLAB-基本简介
  11. 中国行政区划编码-省市县镇村
  12. 202. 快乐数 (Python 实现)
  13. 见信如晤::‘卷福’读信:我全心全意去拥抱您
  14. js每日一题(11)
  15. 解决tar: Error is not recoverable: exiting now
  16. 在GT4 Client端EndpointReferenceType的标准序列化方法
  17. python 操作redis之五(集合)
  18. 受保护的视图编辑会损害计算机,Word打开文件的时候显示受保护的状态怎么解决...
  19. 字号、pt、px、inch、cm 之间的关系及对照表
  20. ddn高性能服务器,全球IO500最新榜单公布,Intel、DDN、浪潮等位列前5

热门文章

  1. 苹果涉嫌利用App Store打压屏幕时间应用竞争对手 已被投诉至欧盟
  2. 听说当今程序员很厉害?不,那是你不了解上古时期的那些神级操作
  3. 一个程序员的简洁职业生涯规划
  4. 晨哥真有料丨女生眼中的高级感!
  5. linux系统微内核,科普:微内核操作系统现状
  6. oracle 临时表空间满了_精心总结--Oracle查询表空间的每日增长量和历史情况统计脚本...
  7. linux 高级文件IO
  8. Linux内存带宽的一些测试笔记
  9. Java中的enum详细解析------Java 语言中 Enum 类型的使用介绍
  10. sentinel 时间窗口_Sentinel 实战-规则持久化