我试图理解lambda函数如何在Java中使用堆
PriorityQueue<Integer> pq = new PriorityQueue<>((x, y) -> y - x);
有人能告诉我什么(x, y)-
所以如果我这样做了
PriorityQueue<Integer> pq = new PriorityQueue<>((x, y) -> y - x);
pq.add(9);
pq.add(5);
System.out.println(pq.peek());
输出是9,因为它是一个最大堆,但我是否应该得到4作为输出,因为(9-5=4)?
我试图理解lambda函数在Java中如何处理堆。
Lambda表达式本身与堆数据结构无关。
>
堆-是一种数据结构,最初在数学中定义,现在大量用于计算机科学领域。
谁能告诉我(x,y)是什么-
这就是你的比较器,也就是说,一个lambda表达式,它实现了一个比较器
PriorityQueue
PriorityQueue
int compare(to1,t2)比较它的两个参数的顺序。返回负整数、零或正整数,因为第一个参数小于、等于或大于第二个参数。
所以,在你的代码中:
PriorityQueue<Integer> pq = new PriorityQueue<>((x, y) -> y - x);
pq.add(9);
pq.add(5);
System.out.println(pq.peek());
当您
时,两个数字在Heap/PQ中排队。peek()
、9
和5
分别被传递到x
和y
。As<代码>9-5
输出是9,因为它是一个最大堆,但我是否应该得到4作为输出,因为(9-5=4)?
9-5=4
仅与比较器相关,以确定两个元素的比较结果是0、正数还是负数,如上所述。
9-5=4
是9
和pq的优先级。peek()
返回值,而不是优先级
newpriorityqueue
所以
9-5=4
大于5-9=-4
因此值
9
将是第一个值。
我有学生类的数组。学生类有两个字段1.private最后的字符串firstName;2.private最后的布尔值是当前; 如果学生处于非活动状态,在学生类中出现的检查当前api将给出错误的值。 下面是我的DTO课程。 现在我想知道最常见的不活跃学生的名字? 我想这样做,与平行流? 什么是并行流代码?
本文向大家介绍请你说说Lamda表达式的优缺点。相关面试题,主要包含被问及请你说说Lamda表达式的优缺点。时的应答技巧和注意事项,需要的朋友参考一下 考察点:Java基础 优点:1. 简洁。2. 非常容易并行计算。3. 可能代表未来的编程趋势。 缺点:1. 若不用并行计算,很多时候计算速度没有比传统的 for 循环快。(并行计算有时需要预热才显示出效率优势)2. 不容易调试。3. 若其他程序员没
使用表达式 例5.1 使用表达式 #!/usr/bin/python # Filename: expression.py length =5 breadth =2 area = length * breadth print'Area is', area print'Perimeter is', 2* (length + breadth) (源文件:code/expression.py) 输出 $
问题内容: 哪个实现不太“繁重”:PriorityQueue或排序的LinkedList(使用Comparator)? 我想对所有项目进行排序。插入将非常频繁,有时我将必须运行所有列表以进行一些操作。 问题答案: A 是最糟糕的选择。要么使用(或更一般地说,是一个实现者),要么。如果确实使用列表,则仅在遍历列表内容之前对其进行排序,而不是在每次插入之后对其进行排序。 有一点要注意的是,迭代器 不
在阅读了关于表达式的这个极好的答案之后,我尝试将我的<code>平面图</code>转换为表达式</code>的<code>。 然后,for-expression。 我得到一个编译时错误 我的for表达式怎么了?
你所编写的大多数语句(逻辑行)都包含了表达式(Expressions)。一个表达式的简单例子便是 2+3。表达式可以拆分成运算符(Operators)与操作数(Operands)。 运算符(Operators)是进行某些操作,并且可以用诸如 + 等符号或特殊关键词加以表达的功能。运算符需要一些数据来进行操作,这些数据就被称作操作数(Operands)。在上面的例子中 2 和 3 就是操作数。 运算