4

是否可以在 Java 中创建对象的 PriorityQueue,其中决定优先级的键是对象的成员?

我在网上看到的所有示例都将一个整数插入 PriorityQueue 并检索它们。我正在寻找一种可以插入对象实例并根据其成员值之一(可能是整数)进行检索的实现。

4

1 回答 1

17

是的,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;
  }
}

希望能帮助到你。

于 2009-09-19T22:31:04.653 回答