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>() {
@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进行排序插入。
匿名类实现匿名函数:
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);
    }
}
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接口。
java的优先队列注意事项的更多相关文章
- 【Java基础】JAVA中优先队列详解
		
总体介绍 优先队列的作用是能保证每次取出的元素都是队列中权值最小的(Java的优先队列每次取最小元素,C++的优先队列每次取最大元素).这里牵涉到了大小关系,元素大小的评判可以通过元素本身的自然顺序( ...
 - Java之优先队列
		
PriorityQueue属于Java Collections Framework.PriorityQueue基于优先级堆,它是Queue接口的实现.当我们需要一个Queue实现时,可以使用这种数据结 ...
 - Java内部类使用注意事项
		
Java内部类使用注意事项: 1. 非静态内部类成员可以访问外部类实例成员 (如注释1),但外部类访问非静态内部类的成员 必须创建非静态内部类对象来访问其成员,如注释2 public class La ...
 - 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 ...
 - [原]Java工程打包注意事项
		
注意事项(持续增加...): 如果Java工程中用到了注解,在用eclipse打jar包时需要注意一下,勾上“Add directory entries”,否则注解的类会注册不上
 - Linux(Centos)之安装Java JDK及注意事项
		
1.准备工作 a.因为Java JDK区分32位和64位系统,所以在安装之前必须先要判断以下我们的Centos系统为多少位系统,命令如下: uname -a 解释:如果有x86_64就是64位的,没有 ...
 - 【转】Java并发编程注意事项
		
保证线程安全的三种方法: 不要跨线程访问共享变量 使共享变量是final类型的 将共享变量的操作加上同步 一开始就将类设计成线程安全的, 比在后期重新修复它,更容易. 编写多线程程序, 首先保证它是正 ...
 - oracle 事务简介,锁的概念,java访问数据库注意事项
		
java链接oracle和连接其他数据库一样有两种方式:1 桥接 jdbc-obdc2 jbdc insert语句一次插入大量数据 insert into table (列1,列2,列3) selec ...
 - Linux(Centos、Debian)之安装Java JDK及注意事项(转)
		
--转自:http://www.cnblogs.com/hanyinglong/p/5025635.html 说明:本人是以Debian 操作系统来进行安装的,这篇文章有很大帮助,才学Linux对有些 ...
 
随机推荐
- 越来越好玩,SPRINGMVC
			
了解了JSP和SERVLET的运行机制, 看完SPRING的内容,理解了一些IOC及AOP之后,进入SPRINGMVC和SPRINGBOOT,感觉轻松多啦.
 - 查看Linux的CPU信息,核数等
			
# 总核数 = 物理CPU个数 X 每颗物理CPU的核数 # 总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数 # 查看物理CPU个数 cat /proc/cpuinfo| ...
 - SharePoint 2013 关闭 customErrors
			
在SharePoint 2013上做开发时,如果不把customErrors 关掉,那调试起来那真叫一个费劲.在2013里,关闭customErrors 和2010一样,只要把文件路径改成15目录下即 ...
 - codeforces   437D   The Child and Zoo
			
time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standa ...
 - Advapi32.dll 函数接口说明
			
Advapi32.dll 函数接口说明 函数原型 说明 AbortSystemShutDown ...
 - C++著名程序库的比较
			
转载出处:http://www.acejoy.com/ace/thread-3777-1-1.html 1.C++各大有名库的介绍——C++标准库 2.C++各大有名库的介绍——准标准库Boost3. ...
 - B5248 [2018多省省队联测]一双木棋 状压dp
			
这个题当时划水,得了二十分,现在来整一整. 这个题用状压来压缩边界线,然后通过记忆化搜索进行dp.我们可以观察到,其实每次转移,就是把一个1向左移一位.最后的状态设为0. 这其中还要有一个变量来记录谁 ...
 - MySQL:常用语句
			
ylbtech-MySQL:常用语句 1.返回顶部 1. -- ---------------------------- -- Table structure for st_student -- -- ...
 - 如何修改vos2009/vos3000的web端口?
			
vos 2009. VOS 3000 2120 -2138版本在这里 /usr/apache-tomcat-5.5.15/conf 编辑 server.xml 找到 <!-- Define a ...
 - codevs1060 搞笑世界杯(概率dp)
			
1060 搞笑世界杯 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 随着世界杯小组赛的结束,法国,阿根廷等世界 ...