我按照here中的示例创建PriorityQueue
。它工作得很好,我能够优先考虑我的对象。但我的问题是在我的理解中,Queue
是FIFO。所以,如果我创建一个PriorityQueue
并按优先级对其进行排序。我首先将一个对象添加到队列中,优先级=低,值= c。然后我将另一个对象添加到我的PriorityQueue
,优先级设置为高,值设置为b。最后我想向PriorityQueue
添加另一个具有高优先级的对象,但值= a。然后我poll()
打印出我得到的这三个对象
priority: High, value: a
priority: High, value: b
priority: Low, value: c
优先级正确排序,但我希望具有相同优先级的两个对象遵循FIFO规则。由于b首先在a之前添加,因此预期结果应为
priority: High, value: b
priority: High, value: a
priority: Low, value: c
这可行吗?我有我的比较器如下
private static Comparator<Request> comparator = new Comparator<Request>(){
@Override
public int compare(Request r1, Request r2) {
return (int) (r1.priority - r2.priority);
}
};
谢谢!
答案 0 :(得分:1)
你无法做到。来自PriorityQueue docs:
此队列的头部是指定排序的最小元素。 如果多个元素绑定的值最小,那么头部就是其中一个元素 - 关系会被任意破坏。 (强调添加)
您可以做的是为每个Request
分配一个唯一的递增ID,然后在比较器中使用它来打破同等优先级实例之间的联系。