Java 带lamda表达式的PriorityQueue
我试图理解lambda函数如何在Java中与堆一起工作。下面的函数是创建一个最大堆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将是第一个
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());