繁体   English   中英

Java中的优先级队列?

[英]Priority queue in Java?

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

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

是的, PriorityQueue有一个构造函数 ,允许您传递一个Comparator来定义元素的顺序。 例如,如果您有以下Bar类:

public class Bar {
  private int priority;

  // getters / setters ...
}

并且您希望创建一个优先级队列,根据priority字段对元素进行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方法中有更复杂的逻辑,或者你想重新使用代码,那么我建议你创建一个实现Comparator<Bar>的类,比如BarComparator

另外,作为上述的替代方法,您可以使Bar实现Comparable接口,并使用构造函数,如下所示:

public class Bar implements Comparable<Bar> {
  private int priority;

  @Override
  public int compareTo(Bar b) {
    return b.getPriority() - this.priority;
  }
}

希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM