Java PriorityQueue,我错过了什么?
我有一个comparator类NComparator,它比较2个节点对象并返回1、-1或0 我初始化了一个PriorityQueue,初始容量为100,并使用该NComparatorJava PriorityQueue,我错过了什么?,java,priority-queue,Java,Priority Queue,我有一个comparator类NComparator,它比较2个节点对象并返回1、-1或0 我初始化了一个PriorityQueue,初始容量为100,并使用该NComparator NComparator nc = new NComparator(); PriorityQueue<Node> pq = new PriorityQueue<Node>(100, nc); 如何根据比较器返回的优先级(仅比较节点的成对组合)在PriorityQueue中排列
NComparator nc = new NComparator();
PriorityQueue<Node> pq = new PriorityQueue<Node>(100, nc);
如何根据比较器返回的优先级(仅比较节点的成对组合)在PriorityQueue中排列这些节点对象?具体来说,我希望能够访问此PriorityQueue中优先级最低的两个节点。如何才能做到这一点?PriorityQueueAPI只支持获取优先级最低的单个节点,但您可以删除该节点,然后再次查询以获取下一个最低的元素。如果您确定NComparator正确排列了节点元素,并且优先级最低的节点位于队列的头部,然后只需执行两次:
pq.poll()
例如:
Node firstLowerNode = pq.poll();
Node secondLowerNode = pq.poll();
这会有帮助的,谢谢,我明白了。我也没有意识到,当我执行pq.add时,PriorityQueue会自动添加它们,因此它们总是按顺序保留。因此,在元素上删除将删除其最低优先级。
Node firstLowerNode = pq.poll();
Node secondLowerNode = pq.poll();