在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>() {
@Override
public int compare(Cell c1, Cell c2) {
if (c1.max < c2.max)
return 1;
else
return -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>() {
@Override
public 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的优先队列注意事项的更多相关文章

  1. 【Java基础】JAVA中优先队列详解

    总体介绍 优先队列的作用是能保证每次取出的元素都是队列中权值最小的(Java的优先队列每次取最小元素,C++的优先队列每次取最大元素).这里牵涉到了大小关系,元素大小的评判可以通过元素本身的自然顺序( ...

  2. Java之优先队列

    PriorityQueue属于Java Collections Framework.PriorityQueue基于优先级堆,它是Queue接口的实现.当我们需要一个Queue实现时,可以使用这种数据结 ...

  3. Java内部类使用注意事项

    Java内部类使用注意事项: 1. 非静态内部类成员可以访问外部类实例成员 (如注释1),但外部类访问非静态内部类的成员 必须创建非静态内部类对象来访问其成员,如注释2 public class La ...

  4. 378. Kth Smallest Element in a Sorted Matrix(java,优先队列)

    题目: Given a n x n matrix where each of the rows and columns are sorted in ascending order, find the ...

  5. [原]Java工程打包注意事项

    注意事项(持续增加...): 如果Java工程中用到了注解,在用eclipse打jar包时需要注意一下,勾上“Add directory entries”,否则注解的类会注册不上

  6. Linux(Centos)之安装Java JDK及注意事项

    1.准备工作 a.因为Java JDK区分32位和64位系统,所以在安装之前必须先要判断以下我们的Centos系统为多少位系统,命令如下: uname -a 解释:如果有x86_64就是64位的,没有 ...

  7. 【转】Java并发编程注意事项

    保证线程安全的三种方法: 不要跨线程访问共享变量 使共享变量是final类型的 将共享变量的操作加上同步 一开始就将类设计成线程安全的, 比在后期重新修复它,更容易. 编写多线程程序, 首先保证它是正 ...

  8. oracle 事务简介,锁的概念,java访问数据库注意事项

    java链接oracle和连接其他数据库一样有两种方式:1 桥接 jdbc-obdc2 jbdc insert语句一次插入大量数据 insert into table (列1,列2,列3) selec ...

  9. Linux(Centos、Debian)之安装Java JDK及注意事项(转)

    --转自:http://www.cnblogs.com/hanyinglong/p/5025635.html 说明:本人是以Debian 操作系统来进行安装的,这篇文章有很大帮助,才学Linux对有些 ...

随机推荐

  1. 【codeforces 701C】They Are Everywhere

    [题目链接]:http://codeforces.com/contest/701/problem/C [题意] 让你选择一段最短的区间; 使得这段区间里面包含所有种类的字符; [题解] 之前都是用二分 ...

  2. Java基础学习总结(74)——Java常见笔试题及答案汇总

    1. 下面哪些是合法的标识符?(ABE )--标识符 A. $persons B. TwoUsers C. *point D. this E. _endline 2. 下面程序运行的结果是( D )- ...

  3. [bzoj4385][POI2015]Wilcze doły_单调队列

    Wilcze doły bzoj-4385 POI-2015 题目大意:给定一个n个数的序列,可以将连续的长度不超过d的区间内所有数变成0,求最长的一段区间,使得区间和不超过p. 注释:$1\le n ...

  4. Spring MVC-视图解析器(View Resolverr)-多重解析器(Multiple Resolver)示例(转载实践)

    以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_multiple_resolver_mapping.htm 说明:示例基于Spri ...

  5. [转]数据库查询 sysobjects

    sysobjects sysobjects是系统自建的表,里面存储了在数据库内创建的每个对象(约束.默认值.日志.规则.存储过程等),各在表中占一行.只有在 tempdb 内,每个临时对象才在该表中占 ...

  6. 学习笔记——SQL SERVER的递归

    SQL SERVER似乎天然具有支持递归的属性. 1.比如说,有几次,我编写或修改存储过程的时候,为图方便,在末尾随手写上 执行这个存储过程 的语句,比如 [sql] view plaincopy A ...

  7. Single document interface和Multiple document interface

    https://en.wikipedia.org/wiki/Single_document_interface https://msdn.microsoft.com/en-us/library/b2k ...

  8. DockPanelSuite中的DocumentStyle

    首先明确一个概念Mdi的完整词组:Multiple document interface namespace WeifenLuo.WinFormsUI.Docking { public enum Do ...

  9. poi读取word2003(.doc文档)中的表格

    poi读取word2003(.doc文档)中的表格 Jakarta POI 是apache的子项目,目标是处理ole2对象.它提供了一组操纵Windows文档的Java API.在网上见到好多通过po ...

  10. UVA 10006(素数打表+快速幂)

    当今计算机科学的一个重要的领域就是密码学.有些人甚至认为密码学是计算机科学中唯一重要的领域,没有密码学生命都没有意义. 阿尔瓦罗就是这样的一个人,它正在设计一个为西班牙杂烩菜饭加密的步骤.他在加密算法 ...