代码之家  ›  专栏  ›  技术社区  ›  Kazoom

Java中的优先级队列?

  •  4
  • Kazoom  · 技术社区  · 15 年前

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

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

    1 回复  |  直到 15 年前
        1
  •  17
  •   João Silva    15 年前

    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> .

    此外,作为上述方法的替代方法,您可以 实施 Comparable empty 构造函数,就像这样:

    public class Bar implements Comparable<Bar> {
      private int priority;
    
      @Override
      public int compareTo(Bar b) {
        return b.getPriority() - this.priority;
      }
    }
    

    希望能有帮助。