Java中的优先级队列?

时间:2009-09-19 22:24:26

标签: java priority-queue

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

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

1 个答案:

答案 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;
  }
}

希望它有所帮助。