如何使用 class 对 Java 中的 PriorityQueue 进行排序
How to Sort PriorityQueue in Java with class
我知道这个问题有很多答案。我试着跟随它,但它不会显示我想要的结果。
有一个
输入
60 3
50 2
20 1
40 2
30 3
30 1
我期待
输出
60 3
50 2
40 2
30 3
30 1
20 1
但是如果我打印 priorityQueue 它将显示
60 3
50 2
40 2
20 1
30 3
30 1
我不知道为什么..
下面是我的代码
import java.util.*;
public class MaximumIncomeSchedule {
static class Schedule {
int income;
int date;
public Schedule(int i, int d) {
income = i;
date = d;
}
}
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
PriorityQueue<Schedule> pq = new PriorityQueue<>(n,(o1, o2) -> {
if(o2.income==o1.income)
return o2.date - o1.date;
return o2.income - o1.income;
});
int mD = 0;
for (int i = 0; i < n; i++) {
int M = sc.nextInt();
int D = sc.nextInt();
Schedule s = new Schedule(M, D);
pq.add(s);
mD = Math.max(mD, D);
}
for (Schedule s : pq) {
System.out.println("income:" + s.income + " " + "time: " + s.date);
}
}
}
您的比较器 lambda 是正确的,您可以按原样使用它。您只需要轮询队列以便以正确的顺序获取元素:
while (!pq.isEmpty()) {
Schedule s = pq.poll();
System.out.println("income:" + s.income + " " + "time: " + s.date);
}
我知道这个问题有很多答案。我试着跟随它,但它不会显示我想要的结果。
有一个
输入
60 3
50 2
20 1
40 2
30 3
30 1
我期待
输出
60 3
50 2
40 2
30 3
30 1
20 1
但是如果我打印 priorityQueue 它将显示
60 3
50 2
40 2
20 1
30 3
30 1
我不知道为什么..
下面是我的代码
import java.util.*;
public class MaximumIncomeSchedule {
static class Schedule {
int income;
int date;
public Schedule(int i, int d) {
income = i;
date = d;
}
}
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
PriorityQueue<Schedule> pq = new PriorityQueue<>(n,(o1, o2) -> {
if(o2.income==o1.income)
return o2.date - o1.date;
return o2.income - o1.income;
});
int mD = 0;
for (int i = 0; i < n; i++) {
int M = sc.nextInt();
int D = sc.nextInt();
Schedule s = new Schedule(M, D);
pq.add(s);
mD = Math.max(mD, D);
}
for (Schedule s : pq) {
System.out.println("income:" + s.income + " " + "time: " + s.date);
}
}
}
您的比较器 lambda 是正确的,您可以按原样使用它。您只需要轮询队列以便以正确的顺序获取元素:
while (!pq.isEmpty()) {
Schedule s = pq.poll();
System.out.println("income:" + s.income + " " + "time: " + s.date);
}