我知道关于这个问题有很多答案。我试着跟随它,但它不会显示我想要的结果。有一个
输入
603
502
201
402
303
301
我希望
输出
60 3
50 2
40 2
30 3
30 1
20 1
但是如果我打印优先级队列,它将显示
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是正确的,您可以按原样使用它。您只需要轮询队列,以便以正确的顺序获取元素:
java prettyprint-override"> while (!pq.isEmpty()) {
Schedule s = pq.poll();
System.out.println("income:" + s.income + " " + "time: " + s.date);
}
我试图使用PriorityQueue对字符串列表进行排序并删除重复项。最初我使用PriorityQueue,它不会更改顺序。我换了树集后,它起作用了。但是,我想了解优先级队列和定义比较器的问题是什么。想听听解释。
我在下面有下面的Java代码,我正在尝试将其转换为Swift。如果有人能在这个问题上帮助我,我将非常感激。 谢谢
问题内容: 我在Java中有一个双打列表,我想按降序对ArrayList进行排序。 输入如下: 输出应该是这样的 问题答案: 那会做你想要的。请记住要导入!
问题内容: 我如何对我要排序的东西进行排序? 另外,和方法之间有区别吗? 问题答案: 使用构造函数重载,该重载采用并传入一个比较器,该比较器以适合你的排序顺序的方式进行比较。如果你举一个如何排序的例子,如果不确定,我们可以提供一些示例代码来实现比较器。(虽然非常简单。) 正如其他地方所说:和只是不同的接口方法实现。在JDK源代码中,请致电。尽管由于具有指示由于大小限制而无法添加该值的能力,通常和可
问题内容: 我有一堂水果课。我正在创建此类的列表,并将每个水果添加到列表中。我想根据水果名称的顺序对该列表进行排序。 我正在使用for循环创建它的列表 我需要使用列表中每个对象的水果名称对该arrayList进行排序 问题答案: 使用这样的: 现在,你的水果清单将基于进行排序。
问题内容: 我们如何排序? 我想根据中的值进行排序。 问题答案: 你是否必须使用HashMap?如果只需要Map Interface,请使用TreeMap 如果要通过比较HashMap中的值进行排序。你必须编写代码才能执行此操作,如果要执行此操作,则可以对HashMap的值进行排序: 如果你想经常访问此排序列表,则可以将元素插入到中,尽管集合和列表的语义有些不同。