2013-07-09 145 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();