如何使用 class in java 的字段实现优先级队列
How to implement a priority queue using the field of a class in java
我有一个名为 MeterReading
的 java class,它有两个字段 String MeterName
和 int 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);
我有一个名为 MeterReading
的 java class,它有两个字段 String MeterName
和 int 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);