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