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

如何使用类[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。如果有人能在这个问题上帮助我,我将非常感激。 谢谢

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

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

  • 问题内容: 我有一堂水果课。我正在创建此类的列表,并将每个水果添加到列表中。我想根据水果名称的顺序对该列表进行排序。 我正在使用for循环创建它的列表 我需要使用列表中每个对象的水果名称对该arrayList进行排序 问题答案: 使用这样的: 现在,你的水果清单将基于进行排序。

  • 问题内容: 我们如何排序? 我想根据中的值进行排序。 问题答案: 你是否必须使用HashMap?如果只需要Map Interface,请使用TreeMap 如果要通过比较HashMap中的值进行排序。你必须编写代码才能执行此操作,如果要执行此操作,则可以对HashMap的值进行排序: 如果你想经常访问此排序列表,则可以将元素插入到中,尽管集合和列表的语义有些不同。