具有lamda表达式的PriorityQueue <Integer>

问题描述

我试图了解lambda函数如何在Java中与堆一起使用。下面的功能是创建一个最大堆

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

有人可以告诉我(x,y) -> y - x)做什么吗? 我告诉我:“ lambda函数将两个Integer作为输入参数,将它们彼此相减,然后返回算术结果。”

所以我愿意

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

pq.add(5);

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

由于最大堆,输出为9,但由于(9-5 = 4),我不应该得到4作为输出吗?

解决方法

reading_skilluser_id优先级,而fun makeAFormattedString(currencyCode: String,numberToConvert: Float): String{ val format: NumberFormat = NumberFormat.getCurrencyInstance() format.maximumFractionDigits = 2 format.currency = Currency.getInstance(currencyCode) return format.format(numberToConvert) } 返回,而不是优先级

9-5=4使用9进行比较并确定接下来要窥视哪个值。

所以pq.peek()大于new PriorityQueue<>(comparator);

因此,值(x,y) -> y - x将是第一个。

,

我试图了解lambda函数如何在Java中与堆一起工作。

Lambda ExpressionHeap Data Structure无关,本身

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

  • 堆-是一种数据结构,最初在数学中定义,如今已在计算机科学领域广泛使用。


有人可以告诉我(x,y)-> y-x)吗?

这就是您的比较器,例如,一个实现Comparator<T> lambda表达式,并将其作为参数传递给优先级队列构造函数。

PriorityQueue<T>然后使用那个比较器,并在每次从中获取(轮询/窥视)元素时都使用int compare(T o1,T o2)方法。

PriorityQueue<T> relies on a contract,that

int compare(T o1,T o2)比较其两个参数的顺序。当第一个参数小于,等于或大于第二个参数时,返回负整数,零或正整数。

因此,在您的代码中:

PriorityQueue<Integer> pq = new PriorityQueue<>((x,y) -> y - x);
pq.add(9);
pq.add(5);
System.out.println(pq.peek());

两个数字在堆/ PQ中被排队,并且当您.peek()95被传递到x和{ {1}}。当y返回true时。


由于最大堆,输出为9,但由于(9-5 = 4),我不应该得到4作为输出吗?

9-5>0仅与比较器有关,以决定两个元素的比较以0,正数还是负数结束,如上所述。