在Java中是否可以创建一个PriorityQueue对象,其中决定优先级的键是对象的成员?
我在网上看到的所有示例都在PriorityQueue中插入一个整数并检索它们。我正在寻找一个实现,它将插入一个对象的实例,并根据其成员值之一进行检索,该成员值可能是一个整数。
答案 0 :(得分:17)
是的,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
}
});
如果compare
方法中有更复杂的逻辑,或者您想重新使用代码,那么我建议您创建一个实现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;
}
}
希望它有所帮助。