Java中关于优先队列PriorityQueue详解
一、优先队列概述
优先队列PriorityQueue是Queue接口的实现,可以对其中元素进行排序,
可以放基本数据类型的包装类(如:Integer,Long等)或自定义的类
对于基本数据类型的包装器类,优先队列中元素默认排列顺序是升序排列
但对于自己定义的类来说,需要自己定义比较器
二、常用方法
peek()//返回队首元素
poll()//返回队首元素,队首元素出队列
add()//添加元素
size()//返回队列元素个数
isEmpty()//判断队列是否为空,为空返回true,不空返回false
三、优先队列的使用
1.队列保存的是基本数据类型的包装类
//自定义比较器,降序排列
static Comparator<Integer> cmp = new Comparator<Integer>() {
public int compare(Integer e1, Integer e2) {
return e2 - e1;
}
};
public static void main(String[] args) {
//不用比较器,默认升序排列
Queue<Integer> q = new PriorityQueue<>();
q.add(3);
q.add(2);
q.add(4);
while(!q.isEmpty())
{
System.out.print(q.poll()+" ");
}
/**
* 输出结果
* 2 3 4
*/
//使用自定义比较器,降序排列
Queue<Integer> qq = new PriorityQueue<>(cmp);
qq.add(3);
qq.add(2);
qq.add(4);
while(!qq.isEmpty())
{
System.out.print(qq.poll()+" ");
}
/**
* 输出结果
* 4 3 2
*/
}
2.队列保存的是自定义类
//矩形类
class Node{
public Node(int chang,int kuan)
{
this.chang=chang;
this.kuan=kuan;
}
int chang;
int kuan;
} public class Test {
//自定义比较类,先比较长,长升序排列,若长相等再比较宽,宽降序
static Comparator<Node> cNode=new Comparator<Node>() {
public int compare(Node o1, Node o2) {
if(o1.chang!=o2.chang)
return o1.chang-o2.chang;
else
return o2.kuan-o1.kuan;
} };
public static void main(String[] args) {
Queue<Node> q=new PriorityQueue<>(cNode);
Node n1=new Node(1, 2);
Node n2=new Node(2, 5);
Node n3=new Node(2, 3);
Node n4=new Node(1, 2);
q.add(n1);
q.add(n2);
q.add(n3);
Node n;
while(!q.isEmpty())
{
n=q.poll();
System.out.println("长: "+n.chang+" 宽:" +n.kuan);
}
/**
* 输出结果
* 长: 1 宽:2
* 长: 2 宽:5
* 长: 2 宽:3
*/
}
}
3.优先队列遍历
PriorityQueue的iterator()不保证以任何特定顺序遍历队列元素。
若想按特定顺序遍历,先将队列转成数组,然后排序遍历
示例
3.优先队列遍历 PriorityQueue的iterator()不保证以任何特定顺序遍历队列元素。 若想按特定顺序遍历,先将队列转成数组,然后排序遍历 示例
4.比较器生降序说明
Comparator<Object> cmp = new Comparator<Object>() {
public int compare(Object o1, Object o2) {
//升序
return o1-o2;
//降序
return o2-o1;
}
};
Java中关于优先队列PriorityQueue详解的更多相关文章
- java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET
java中的io系统详解 - ilibaba的专栏 - 博客频道 - CSDN.NET 亲,“社区之星”已经一周岁了! 社区福利快来领取免费参加MDCC大会机会哦 Tag功能介绍—我们 ...
- Java中的main()方法详解
在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方法有很大的不同,比如方法的名字必须是main,方法必须是 ...
- Java I/O : Java中的进制详解
作者:李强强 上一篇,泥瓦匠基础地讲了下Java I/O : Bit Operation 位运算.这一讲,泥瓦匠带你走进Java中的进制详解. 一.引子 在Java世界里,99%的工作都是处理这高层. ...
- Java的优先队列PriorityQueue详解
一.优先队列概述 优先队列PriorityQueue是Queue接口的实现,可以对其中元素进行排序, 可以放基本数据类型的包装类(如:Integer,Long等)或自定义的类 对于基本数据类型的包装器 ...
- java中list和map详解
一.概叙 List , Set, Map都是接口,前两个继承至Collection接口,Map为独立接口, List下有ArrayList,Vector,LinkedList Set下有HashSet ...
- JAVA中的GC机制详解
优秀Java程序员必须了解的GC工作原理 一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只 ...
- Java中的枚举使用详解
转载至:http://www.cnblogs.com/linjiqin/archive/2011/02/11/1951632.html package com.ljq.test; /** * 枚举用法 ...
- Java中getBytes()方法--使用详解
getBytes()方法详解 在Java中,String的getBytes()方法是得到一个操作系统默认的编码格式的字节数组.这表示在不同的操作系统下,返回的东西不一样! 1. str.getByte ...
- HTTP协议报文、工作原理及Java中的HTTP通信技术详解
一.web及网络基础 1.HTTP的历史 1.1.HTTP的概念: HTTP(Hyper Text Transfer Protocol ...
- 关于Java中null的十点详解
对于每一个Java程序员来说,null肯定是一个让人头痛的东西,连Java的发明者都承认这是一项巨大的设计失误,今天就来总结一下Java中关于null的知识. 1.null不属于任何类型,可以被转换成 ...
随机推荐
- 链表--insert
分别是使用了二级指针和一级指针的两种方法,最后会按插入的顺序依次打印1,2,3,4 主要区别在于,使用二级指针,可以在main函数里直接用一个空的Node指针,而一级指针是在main函数里面先添加了一 ...
- DVWA XSS
XSS Store hign level <?php if( isset( $_POST[ 'btnSign' ] ) ) { // Get input $message = trim( $_P ...
- heapq模块通过nlargest()和nsmallest()找到最大或最小的N个元素
问题 我们想在某个集合中找出最大或最小的N个元素 解决方案 heapq模块中有两个函数nlargest()和nsmallest() import heapq nums = [1,8,2,23,7,-4 ...
- Android Studio 导入自己编译的 framework jar
网上的文章大多是 Android Studio 2.x 环境,实行起来,坑比较多. 本文适用于 Android Studio 3.x 及以上,亲测可行. 一.编译生成 framework.jar 包 ...
- rt_snprintf()是什么
在c++中snprintf()函数的解释 1,函数原型: int snprintf(char* dest_str,size_t size,const char* format,...); 2,功能 将 ...
- 学习笔记:勒让德(Legendre)符号
授课老师:ybx.chh. 授课时间:2024/3/8. 授课内容纲要:勒让德符号及其性质(欧拉准则,高斯引理,二次互反律). 勒让德符号概括 好像在 OI 和 MO 当中都挺有用的. 勒让德符号的定 ...
- 一文搞定POI,再也不怕excel导入导出了
写在前面 在Java日常开发过程中,实现Excel文件的导入导出功能是一项常见的需求. 通过使用相关的Java库,如Apache POI.EasyPoi或EasyExcel,可以轻松地实现Excel文 ...
- 分布式理论 & RPC & Dubbo
分布式服务框架(RPC) 用于提高机器利用率的资源调度和治理中心*(SOA)[ Service Oriented Architecture] Dubbo(RPC框架) 服务提供者**(Provider ...
- Debian安装KDE的方法
安装KDE指令 sudo apt install kde-plasma-desktop--最小安装:仅安装桌面环境以及基础软件 sudo apt install kde-standard --标准安装 ...
- 2024 SemEval 冠军
SemEval Task10,本质是一个文本分类的任务,有三个子任务,论文摘要如下:在多维对话中,情绪不仅作为情感交流的重要中介者,还承载着丰富的信息.因此,准确识别交流者的情绪并理解情绪变化的触发因 ...