Java 中的比较器和 PriorityQueue 如何工作?
How comparator and PriorityQueue in Java works?
这是我在 Java 中用来反转 priorityQueue 正常工作的代码。
但我不明白我放在括号内的 lambda 函数做了什么。有人可以解释一下吗?
PriorityQueue pq = new PriorityQueue<>((a,b) -> b - a);
import java.util.*;
public class Main
{
public static void main(String[] args) {
PriorityQueue<Integer> pq = new PriorityQueue<>((a,b) -> b - a);
pq.add(2);
pq.add(4);
pq.add(1);
pq.add(100);
System.out.println(pq);
System.out.println(pq.remove());
System.out.println(pq.remove());
System.out.println(pq.remove());
System.out.println(pq.remove());
}
}
比较函数必须 return 任何小于 0
的值,当第一个参数应该排在第二个之前,任何大于 0
的值,当第二个参数应该在第一个和 0
之前排序,如果这两个参数对于排序是等效的。
它在 PriorityQueue
内部使用,通过将其结果与 0 进行比较来确定元素的相对顺序。
这是我在 Java 中用来反转 priorityQueue 正常工作的代码。
但我不明白我放在括号内的 lambda 函数做了什么。有人可以解释一下吗?
PriorityQueue pq = new PriorityQueue<>((a,b) -> b - a);
import java.util.*;
public class Main
{
public static void main(String[] args) {
PriorityQueue<Integer> pq = new PriorityQueue<>((a,b) -> b - a);
pq.add(2);
pq.add(4);
pq.add(1);
pq.add(100);
System.out.println(pq);
System.out.println(pq.remove());
System.out.println(pq.remove());
System.out.println(pq.remove());
System.out.println(pq.remove());
}
}
比较函数必须 return 任何小于 0
的值,当第一个参数应该排在第二个之前,任何大于 0
的值,当第二个参数应该在第一个和 0
之前排序,如果这两个参数对于排序是等效的。
它在 PriorityQueue
内部使用,通过将其结果与 0 进行比较来确定元素的相对顺序。