PriorityQueue,我错过了什么?

时间:2013-07-09 21:37:07

标签: java priority-queue

我有一个比较器类NComparator,它比较2个Node对象并返回1,-1或0。

我初始化了一个初始容量为100的PriorityQueue和NComparator。

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

我有大约25个Node对象(可以与NComparator进行比较),我将它们全部添加到PriorityQueue对象中:

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

如何通过比较器返回的优先级(仅比较节点的成对组合)在PriorityQueue中排列这些节点对象?具体来说,我希望能够访问此PriorityQueue中优先级最低的两个节点。我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

PriorityQueue API仅支持获取优先级最低的单个节点,但您可以将其删除,然后再次查询以获取下一个最低元素。

答案 1 :(得分:0)

如果您确定NComparator正确排列了Node元素,并且队列中的优先级最低,那么您只需两次pq.poll() { {3}}

示例:

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