有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

优先级队列如何使用类对Java中的优先级队列进行排序

我知道关于这个问题有很多答案。我试着跟随它,但它不会显示我想要的结果。 有一个
输入
60 3
50.2
21
402
30.3
31

我期待着 输出
60 3
50.2
402
30.3
31
21

但如果我打印priorityQueue,它将显示

60 3
50.2
402
21
30.3
31

我不知道为什么

下面是我的代码

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) 个答案

  1. # 1 楼答案

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

        while (!pq.isEmpty()) {
          Schedule s = pq.poll();
          System.out.println("income:" + s.income + " " + "time: " + s.date);
        }