Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的优先级队列?_Java_Priority Queue - Fatal编程技术网

Java中的优先级队列?

Java中的优先级队列?,java,priority-queue,Java,Priority Queue,在Java中,是否可以创建一个优先级队列,其中决定优先级的键是对象的成员 我在网上看到的所有示例都在PriorityQueue中插入一个整数并检索它们。我正在寻找一个可以插入对象实例并基于其成员值之一(可能是整数)进行检索的实现。是的,PriorityQueue具有允许您传递比较器来定义元素顺序的。例如,如果您有以下Bar类: public class Bar { private int priority; // getters / setters ... } 如果要创建一个优先级队

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


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

是的,
PriorityQueue
具有允许您传递
比较器来定义元素顺序的。例如,如果您有以下
Bar
类:

public class Bar {
  private int priority;

  // getters / setters ...
}
如果要创建一个优先级队列,根据
优先级
字段对元素进行排序(例如,优先级较高的项目位于队列前面),可以使用以下方法:

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
  }
});

希望能有所帮助。

当你说按更高优先级排序时,你的意思是优先级为3的酒吧比优先级为13的酒吧优先级更高吗?从这个意义上说,优先级值较小的酒吧实际上“优先级更高”,正好相反。优先级为20的
条形图A
的优先级高于优先级为18的
条形图b
,因此,
条形图A
保持在队列的前面。
public class Bar implements Comparable<Bar> {
  private int priority;

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