当前位置: 代码网 > it编程>编程语言>Java > Java优先队列的创建与使用详解

Java优先队列的创建与使用详解

2024年08月01日 Java 我要评论
java优先队列的创建与使用最近刷到了力扣的第347题.前k个高频元素,由于之前一直用c++刷题,对于java的语法还有些生疏,这道题目需要使用优先队列解题,一下子不知道怎么创建了。首先在java中优

java优先队列的创建与使用

最近刷到了力扣的第347题.前k个高频元素,由于之前一直用c++刷题,对于java的语法还有些生疏,这道题目需要使用优先队列解题,一下子不知道怎么创建了。

首先在java中优先队列是由priorityqueue实现queue的接口,可以对队列中的元素按照大小顺序进行排序,对于队列中的元素,可以是基本数据类型的包装类,也可以是自定义的类。

1.基本数据类型作为队列元素

我们以integer,整数类型的包装类为例,构造一个优先队列

queue<integer>que = new priorityqueue<>();
que.add(2);
que.add(1);
que.add(3);
//在这种默认的构造方式下,队列中的元素是从小到大排序的
//队列中元素顺序依次为1,2,3

如果要构造最大优先队列,可以使用lambda表达式

代码如下所示:

//注意这里return x1-x2为最小优先队列,x2-x1为最大优先队列
queue<integer>que = new priorityqueue<>((x1,x2)->{return x2-x1;});
que.add(2);
que.add(1);
que.add(3);
//此时队列中的元素依次为3,2,1

2.自定义数据类型作为队列元素

假设我们需要使用map<integer,integer>来对出现过的整数统计出现过的次数,即按照map的值进行排序,应该如何做呢?

看如下代码:

map<integer,integer>map = new hashmap<>();
//....整数出现次数进行统计,假设已经全部统计进入map中
//用一个集合来获取map中的所有键值对
set<map.entry<integer,integer>> set = map.entryset();
//创建优先队列 同样使用lambda表达式,getvalue()函数用于获取map中的值
//x1-x2即按照升序,是最小优先队列
queue<map.entry<integer,integer>>que = new priorityqueue<>((x1,x2)->{return x1.getvalue()-x2.getvalue();})
//再把set中的键值对加入que中 则元素按照值的升序排列在队列que中
for(map.entry<integer,integer> en:set){
que.add(en); //或que.offer(en);
}

使用map<integer,integer>类型创建优先队列的过程如上所示,如果是一些自定义的类,比如学生的学号,年龄,进行排序,同样可以这样操作,关于priorityqueue的方法可以查看java api手册

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com