如何使用 class in java 的字段实现优先级队列

How to implement a priority queue using the field of a class in java

我有一个名为 MeterReading 的 java class,它有两个字段 String MeterNameint MeterLevel

现在,如果MeterLevel在0到3之间,就是Low,在3到6之间,Medium,从6以上就是High。我如何将 class MeterReading 传递给优先队列?这可能吗?

您必须实现 class 的 Comparable 接口。诀窍是添加一个方法来获取 compareTo 方法中使用的 levelClass(LOW、MEDIUM、HIGH)。

public class MeterReading implements Comparable {
    public static final int LOW = 0;
    public static final int MEDIUM = 1;
    public static final int HIGH = 2;

    private String name;
    private double level;

    ... // Constructor, getter setter and business logic methods

    public int getLevelClass() {
        if (level < 3) {
            return LOW;
        } else if (level < 6) {
            return MEDIUM;
        } else {
            return HIGH;
        }
    }

    public int compareTo(MeterReading m2) {
        return getLevelClass() - m2.getLevelClass();
    }
}

如果你需要相反的优先级,compareTo的实现也可以是下面的。

public int compareTo(MeterReading m2) {
    return m2.getLevelClass() - getLevelClass();
}

要将 MeterReading 添加到 PriorityQueue 只需添加

MeterReading mr = ....;
PriorityQueue pq = ....;
....
pq.add(mr);