当前位置: 首页 > 知识库问答 >
问题:

如何使用类[duplicate]对Java中的PriorityQueue进行排序

长孙鸿
2023-03-14

我知道关于这个问题有很多答案。我试着跟随它,但它不会显示我想要的结果。有一个
输入
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);
        }
    }
}

共有1个答案

狄灵均
2023-03-14

您的比较器lambda是正确的,您可以按原样使用它。您只需要轮询队列,以便以正确的顺序获取元素:

java prettyprint-override">    while (!pq.isEmpty()) {
      Schedule s = pq.poll();
      System.out.println("income:" + s.income + " " + "time: " + s.date);
    }
 类似资料:
  • 我试图使用PriorityQueue对字符串列表进行排序并删除重复项。最初我使用PriorityQueue,它不会更改顺序。我换了树集后,它起作用了。但是,我想了解优先级队列和定义比较器的问题是什么。想听听解释。

  • 我在下面有下面的Java代码,我正在尝试将其转换为Swift。如果有人能在这个问题上帮助我,我将非常感激。 谢谢

  • 我有两个数组X 期望结果:[(1 , 2), (4 , 13), (5 , 16), (6 , 5), (6 , 9), (7 , 5), (9 , 4), (13 , 1), (13 , 8), (20 , 7)] 实际结果:[(1,2)、(6,5)、(4,13)、(7,5)、(6,9)、(13,1)、(5,16)、(20,7)、(9,4)、(13,8)] 我知道我想在这里实现的可以用其他数据结

  • 问题内容: 我如何对我要排序的东西进行排序? 另外,和方法之间有区别吗? 问题答案: 使用构造函数重载,该重载采用并传入一个比较器,该比较器以适合你的排序顺序的方式进行比较。如果你举一个如何排序的例子,如果不确定,我们可以提供一些示例代码来实现比较器。(虽然非常简单。) 正如其他地方所说:和只是不同的接口方法实现。在JDK源代码中,请致电。尽管由于具有指示由于大小限制而无法添加该值的能力,通常和可

  • 问题内容: 我在Java中有一个双打列表,我想按降序对ArrayList进行排序。 输入如下: 输出应该是这样的 问题答案: 那会做你想要的。请记住要导入!

  • 我有一个数据库表,我想对其进行筛选,然后按相反(降序)顺序进行排序。我如何在类似于以下内容的速度流中表达: 我希望我的SQL查询能够通过速度优化,因此我不能使用匿名lambda。