在Java中,是否可以创建一个对象的优先队列,其中决定优先级的键是对象的成员?
我在网络上看到的所有示例都将整数插入PriorityQueue并检索它们。我正在寻找一种实现方式,可以插入对象实例,并根据其某个成员值(可能是整数)进行检索。
在Java中,是否可以创建一个对象的优先队列,其中决定优先级的键是对象的成员?
我在网络上看到的所有示例都将整数插入PriorityQueue并检索它们。我正在寻找一种实现方式,可以插入对象实例,并根据其某个成员值(可能是整数)进行检索。
是的,PriorityQueue
有一个constructor,允许您传递一个Comparator
来定义元素的顺序。例如,如果您有以下Bar
类:
public class Bar {
private int priority;
// getters / setters ...
}
priority
字段为依据对元素进行排序(例如,具有更高优先级的项目留在队列前面),可以使用以下代码:Queue<Bar> queue = new PriorityQueue<Bar>(new Comparator<Bar>() {
public int compare(Bar a1, Bar a2) {
return a2.getPriority() - a1.getPriority(); // adapt this to your needs
}
});
BarComparator
,实现Comparator<Bar>
接口。
另外,作为上述方法的替代方案,你可以让Bar
实现Comparable
接口,并使用empty构造函数,像这样:
public class Bar implements Comparable<Bar> {
private int priority;
@Override
public int compareTo(Bar b) {
return b.getPriority() - this.priority;
}
}