在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. [LeetCode] 887. Super Egg Drop 超级鸡蛋掉落

    You are given K eggs, and you have access to a building with N floors from 1 to N.  Each egg is iden ...

  2. linux学习8-正则表达式基础

    正则表达式基础 实验介绍 虽然我们这一节的标题是正则表达式,但实际这一节实验只是介绍grep,sed,awk这三个命令,而正则表达式作为这三个命令的一种使用方式(命令输出中可以包含正则表达式).正则表 ...

  3. hadoop手工移块

    1.关于磁盘使用策略,介绍参考http://www.it165.net/admin/html/201410/3860.html 在hadoop2.0中,datanode数据副本存放磁盘选择策略有两种方 ...

  4. hdu 4975 最大流解决行列和求矩阵问题,用到矩阵dp优化

    //刚开始乱搞. //网络流求解,如果最大流=所有元素的和则有解:利用残留网络判断是否唯一, //方法有两种,第一种是深搜看看是否存在正边权的环,见上一篇4888 //至少四个点构成的环,第二种是用矩 ...

  5. Flume基本概念

    1         Apache Flume 1.1         概述 Flume是Cloudera提供的一个高可用,高可靠的,分布式的海量日志采集.聚合和传输的软件. Flume的核心是把数据从 ...

  6. Openfire:通过Servlet群发消息

    在Openfire中自带有Broadcase插件,可以让我们群发消息给全部用户或者组.不过如果是我们通过Servlet来实现这一功能,那么是能够增加一定的灵活性的.具体做法直接看Demo代码: pub ...

  7. joinColumns和inverseJoinColumns的使用方法

    近期在工作中使用springside.里面用到了hibernate的多对多 一開始我在配置department(部门表)和menu(栏目表)的时候.这样写的. Department实体类中的getMe ...

  8. 《CS:APP》 chapter 9 Vitrual Memory 笔记

    Vitrual Memory In order to manage memory more efficiently and with fewer errors, modern systems prov ...

  9. ubuntu下C程序的编辑、编译、运行

    均以hello world程序为例 一.vim hello.c/hello.cpp 创建hello.c/hello.cpp文件,并进入vim界面 二.此时按键盘上的很多键均不会有任何反应,键入i,进入 ...

  10. 【POJ 1011】 Sticks

    [题目链接] http://poj.org/problem?id=1011 [算法] 深搜剪枝 首先我们枚举木棍的长度i,那么就有s/i根木棍,其中s为木棍长度的总和,朴素的做法就是对每种长度进行搜索 ...