Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带lamda表达式的PriorityQueue_Java_Lambda_Max Heap - Fatal编程技术网

Java 带lamda表达式的PriorityQueue

Java 带lamda表达式的PriorityQueue,java,lambda,max-heap,Java,Lambda,Max Heap,我试图理解lambda函数如何在Java中与堆一起工作。下面的函数是创建一个最大堆 PriorityQueue<Integer> pq = new PriorityQueue<>((x, y) -> y - x); 输出是9,因为它是一个最大堆,但我不应该得到4作为输出,因为9-5=4?9-5=4是9的优先级,pq.peek返回值,而不是优先级 新的优先级队列比较器;使用x,y->y-x比较并确定下一个要查看的值 所以9-5=4大于5-9=-4 因此值9将是第一个

我试图理解lambda函数如何在Java中与堆一起工作。下面的函数是创建一个最大堆

PriorityQueue<Integer> pq = new PriorityQueue<>((x, y) -> y - x);
输出是9,因为它是一个最大堆,但我不应该得到4作为输出,因为9-5=4?

9-5=4是9的优先级,pq.peek返回值,而不是优先级

新的优先级队列比较器;使用x,y->y-x比较并确定下一个要查看的值

所以9-5=4大于5-9=-4

因此值9将是第一个值。

9-5=4是9的优先级,pq.peek返回值,而不是优先级

新的优先级队列比较器;使用x,y->y-x比较并确定下一个要查看的值

所以9-5=4大于5-9=-4

所以值9将是第一个

我试图理解lambda函数在Java中如何处理堆

从本质上来说,这与我们无关

Lambda表达式-是一种语言功能,其作用类似于匿名函数,您可以使用/传递它作为值

堆-是一种数据结构,最初在数学中定义,现在大量用于计算机科学领域

有人能告诉我x,y->y-x是做什么的吗

这是您的比较器,也就是说,一个lambda表达式,它实现了一个比较器,并作为参数传递给优先级队列构造函数

然后,每次从中获取poll/peek元素时,PriorityQueue都会使用该比较器并使用该方法

优先队列:

int compareT o1,t2比较其两个参数的顺序。返回负整数、零或正整数,因为第一个参数小于、等于或大于第二个参数

因此,在您的代码中:

优先级队列pq=新建优先级队列x,y->y-x; pq.add9; pq.add5; System.out.printlnpq.peek; 两个数字在Heap/PQ中排队,当您使用.peek时,9和5分别被传递到x和y中。当9-5>0时,返回true

输出是9,因为它是一个最大堆,但我不应该得到4作为输出,因为9-5=4

9-5=4仅与比较器相关,用于确定两个元素的比较结果是0、正数还是负数,如上所述

我试图理解lambda函数在Java中如何处理堆

从本质上来说,这与我们无关

Lambda表达式-是一种语言功能,其作用类似于匿名函数,您可以使用/传递它作为值

堆-是一种数据结构,最初在数学中定义,现在大量用于计算机科学领域

有人能告诉我x,y->y-x是做什么的吗

这是您的比较器,也就是说,一个lambda表达式,它实现了一个比较器,并作为参数传递给优先级队列构造函数

然后,每次从中获取poll/peek元素时,PriorityQueue都会使用该比较器并使用该方法

优先队列:

int compareT o1,t2比较其两个参数的顺序。返回负整数、零或正整数,因为第一个参数小于、等于或大于第二个参数

因此,在您的代码中:

优先级队列pq=新建优先级队列x,y->y-x; pq.add9; pq.add5; System.out.printlnpq.peek; 两个数字在Heap/PQ中排队,当您使用.peek时,9和5分别被传递到x和y中。当9-5>0时,返回true

输出是9,因为它是一个最大堆,但我不应该得到4作为输出,因为9-5=4

9-5=4仅与比较器相关,用于确定两个元素的比较结果是0、正数还是负数,如上所述

PriorityQueue<Integer> pq = new PriorityQueue<>((x, y) -> y - x);
pq.add(9);

pq.add(5);

System.out.println(pq.peek());