java的优先队列注意事项
在C++语言中,使用优先队列,直接构建一个lambda表达式,使用一个匿名函数指针。java比较函数的返回值不是bool型,只能是整型。
内部对应的C++匿名函数:
// 匿名Comparator实现
auto compareMax = []( const Cell &a, const Cell &b ) { return a.max < b.max; };
对应的Java函数:
import java.util.Queue;
import java.util.Comparator;
import java.util.PriorityQueue;// 匿名Comparator实现public static Comparator<Cell> compareMax = new Comparator<Cell>() {@Overridepublic int compare(Cell c1, Cell c2) {if (c1.max < c2.max)return 1;elsereturn -1;}};
匿名比较函数实现,java使用int型,返回值为1和-1,C++可以使用boolean型。其实应该写一个lambda表达式的
Java优先队列的使用:
Queue<Cell> cellQueue = new PriorityQueue( compareMax );
对应C++ 优先队列的使用:
using Queue = std::priority_queue< Cell<T>, std::vector<Cell<T> >, decltype(compareMax)>;
Queue<Cell> cellQueue = new PriorityQueue(compareMax);
实现功能,在插入时,可以使用c.max进行排序插入。
参考:java函数式编程之lambda表达式
匿名类实现匿名函数:
public void testAnonymousClass() {Integer[] nums = {2, 5, 1, 6};Arrays.sort(nums, new Comparator<Integer>() {@Overridepublic int compare(Integer o1, Integer o2) {if(o1 < o2)return -1;return 0;}});for (Integer n : nums) {System.out.println(n);}
}
lambda 表达式:
public void testAnonymousClass() {Integer[] nums = {2, 5, 1, 6};Arrays.sort(nums, (o1, o2) -> {if(o1 < o2)return -1;return 0;});for (Integer n : nums) {System.out.println(n);}
}
参考:java中queue的使用
Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Queue接 口。Queue接口窄化了对LinkedList的方法的访问权限(即在方法中的参数类型如果是Queue时,就完全只能访问Queue接口所定义的方法 了,而不能直接访问 LinkedList的非Queue的方法),以使得只有恰当的方法才可以使用。BlockingQueue 继承了Queue接口。
add 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常
remove 移除并返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
element 返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
offer 添加一个元素并返回true 如果队列已满,则返回false
poll 移除并返问队列头部的元素 如果队列为空,则返回null
peek 返回队列头部的元素 如果队列为空,则返回null
put 添加一个元素 如果队列满,则阻塞
take 移除并返回队列头部的元素 如果队列为空,则阻塞
remove、element、offer 、poll、peek 其实是属于Queue接口。
参考:java8 手把手教你学会写lambda表达式
java的优先队列注意事项相关推荐
- Java入门学习注意事项有哪些?
想要学好java技术,做好学习规划路线和注意事项是非常重要的,尤其是零基础学员,Java涉及到的知识点非常多,我们需要制定合理的Java学习路线图,这样会事半功倍,下面小编和大家总结一下Java入门学 ...
- JAVA 逻辑运算符及注意事项
java 逻辑运算符 逻辑运算符: 指把各个运算的关系表达式连接起来组成一个复杂的逻辑表达式,以判断程序中的表达式是否成立,判断的结果是布尔值(boolean) 逻辑运算符 与(并且) &&a ...
- Java基于优先队列的贪心算法,java
关于这篇博客 这篇博客是在我读<你不知道的JavaScript-上卷>的时候,遇到的我觉得需要记录下来的知识. 刚好又能够配合之前我写的这篇执行上下文与执行上下文栈博客中关于变量提升与函数 ...
- 373. Find K Pairs with Smallest Sums (java,优先队列)
题目: You are given two integer arrays nums1 and nums2 sorted in ascending order and an integer k. Def ...
- Linux(Centos)之安装Java JDK及注意事项
1.准备工作 a.因为Java JDK区分32位和64位系统,所以在安装之前必须先要判断以下我们的Centos系统为多少位系统,命令如下: uname -a 解释:如果有x86_64就是64位的,没有 ...
- (转)Linux(Centos)之安装Java JDK及注意事项
场景:天下事有难易乎?为之,则难者亦易矣:不为,则易者亦难矣.人之为学有难易乎?学之,则难者亦易矣:不学,则易者亦难矣. 1 准备工作 下面配置jdk的方式在具有root权限时候能够执行.如果没有ro ...
- Java Arrays.asList注意事项
Arrays.asList用来将数组转化为List,这个看似功能很明了的方法却暗藏玄机. 请先看下面的程序: int[] datas = new int[]{1,2,3,4,5}; List list ...
- Java PriorityQueue优先队列详解(源码+图文步骤解析)
文章目录 1.概述 2.入队分析 3.出队分析 4.总结 1.概述 PriorityQueue 称为优先队列,也是一种特殊的有序队列.为什么特殊呢? 因为其内部使用 Object[] 数组来存储数据, ...
- 【LeetCode笔记】347. 前K个高频元素(Java、优先队列、小顶堆、HashMap)
文章目录 题目描述 思路 & 代码 更新版:引入 stream 流 + Lambda 题目描述 时间复杂度小于O(n*logn),否则直接sort,再遍历就很轻松. 很有学习价值的题目,第一次 ...
最新文章
- 又一游戏大盗(完美世界、跑跑等)SysInfo1.dll
- 强行覆盖远程的gitlab 出错
- 练习mvc做一个知识库(二)
- 飞鸽传书为我们提供了方便的聊天工具
- [delphi函数]RenameFile 文件改名
- Vue 过滤器/watch/computed
- 添加ClearWindow.py文件实现IDLE的清屏功能
- 局域网聊天服务器(openfire)安装与配置
- 【UML】构件图(Component Diagram)
- Linux部署单体架构,从单体式架构迁移到微服务架构:三个策略叙述
- SQL Server 2000 数据库安装与配置图文教程
- 如何安全快速的迁移你的系统到固态硬盘
- 极光小课堂 | PostCss浅析之词法分析
- endnote 教程
- Oracle中创建用户和授权
- WIN7/WIN10 临时及永久 强制关闭驱动签名验证
- 《Adobe Fireworks CS5中文版经典教程》——1.7复习
- android 64位系统中,需要引用32位库,导致挂掉的问题
- RabbitMQ之交换机的讲解
- VSC的基础使用(插件和设置)