是否可以在 Java 中创建对象的 PriorityQueue,其中决定优先级的键是对象的成员?
我在网上看到的所有示例都将一个整数插入 PriorityQueue 并检索它们。我正在寻找一种可以插入对象实例并根据其成员值之一(可能是整数)进行检索的实现。
是否可以在 Java 中创建对象的 PriorityQueue,其中决定优先级的键是对象的成员?
我在网上看到的所有示例都将一个整数插入 PriorityQueue 并检索它们。我正在寻找一种可以插入对象实例并根据其成员值之一(可能是整数)进行检索的实现。
是的,PriorityQueue
有一个构造函数,允许您通过 aComparator
来定义元素的顺序。例如,如果您有以下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
接口,并使用空构造函数,如下所示:
public class Bar implements Comparable<Bar> {
private int priority;
@Override
public int compareTo(Bar b) {
return b.getPriority() - this.priority;
}
}
希望能帮助到你。