0

我有一个比较器类 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 中优先级最低的两个节点。我怎样才能做到这一点?

4

2 回答 2

2

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

于 2013-07-09T21:42:23.833 回答
0

如果您确定您的 NComparator 正确排列了 Node 元素,并且优先级最低的是在队列的头部,那么您只需要做两次pq.poll() 参见 PriorityQueue API

例子:

  Node firstLowerNode = pq.poll();
  Node secondLowerNode = pq.poll();
于 2013-07-09T22:10:13.300 回答