2013-07-09 109 views
0

我有一個比較器類NComparator比較2個節點對象並返回1,-1或0.PriorityQueue,我錯過了什麼?

我初始化了一個PriorityQueue,初始容量爲100,並且該NComparator。

NComparator nc = new NComparator(); 
    PriorityQueue<Node> pq = new PriorityQueue<Node>(100, nc); 

我已經約25 Node對象(可以用NComparator相比),而且我他們都加入到時Queue對象:

pq.add(new Node("A", 3)); 
    pq.add(new Node("G", 1)); 
    pq.add(new Node("B", 10)); 
    .... etc 

我如何安排由在PriorityQueue中這些節點對象比較器返回的優先級(它只比較節點的成對組合)?具體來說,我希望能夠訪問PriorityQueue中具有最低優先級的兩個節點。我怎樣才能做到這一點?

+0

這將有助於http://stackoverflow.com/questions/11003155/change-priorityqueue-to-max-priorityqueue –

回答

2

PriorityQueue API只支持獲取具有最低優先級的單節點,但您可以刪除該節點,然後再次查詢以獲取下一個最低元素。

+0

謝謝,我明白了。我沒有意識到,當我做pq.add時,PriorityQueue會自動添加它們,以便它們總是保持順序。因此刪除元素將刪除其最低優先級。 – LanneR

0

如果你確定你的NComparator正確排列節點元素,最低優先級的隊列的頭,那麼你只需要做的,兩次pq.poll()See the PriorityQueue API

例子:

Node firstLowerNode = pq.poll(); 
    Node secondLowerNode = pq.poll();