2014-12-03 98 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