2014-12-03 93 views
0

我按照here的示例创建PriorityQueue。它工作得很好,我能够优先考虑我的对象。但我的问题是我的理解,Queue是FIFO。所以可以说,如果我创建一个PriorityQueue并按优先级排序。我首先将一个对象添加到优先级=低和值= c的队列中。然后我将另一个对象添加到我的PriorityQueue,优先级设置为高,值设置为b。最后我想添加另一个对象PriorityQueue高优先级但值= a。然后我做poll()打印出这三个对象,我得到如何在java中实现有序但未排序的priorityqueue?

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

谢谢!

回答

1

你不能这样做。来自PriorityQueue docs

该队列的头部是相对于指定排序的最小元素。 如果多个元素的最小值相关,那么头是其中的一个元素 - 关系被任意破坏。(强调)

你可以做的是分配给每个Request一个唯一的,递增的ID,然后使用你比较打破同样优先级的实例之间的联系。

+0

得到它!感谢您的快速帮助 – user1865027 2014-12-03 20:08:50