PriorityQueue 在添加时未排序
我有一个优先级队列,我在其中添加一个节点对象,其中节点应按它们包含的值排序。由于某种原因,优先级队列不会在添加时对节点进行排序。如果有人能发现其中的问题或有任何指导,我很感激。这是一个简短的示例:
PriorityQueue<Node> PQ = new PriorityQueue<Node>();
//for each entry create a node and add it to the PriorityQueue
for(Entry<Character,Integer> entry : entries){
PQ.add(new Node(entry.getKey(),entry.getValue(), true));
}
这是节点的 compareTo
方法:
@Override
public int compareTo(Node n) {
if(n.frequency.intValue() > this.frequency.intValue()) return -1;
else if(n.frequency.intValue() == this.frequency.intValue()) return 0;
else return 1;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我猜您希望
PriorityQueue
在迭代时按特定顺序返回元素。但是,PriorityQueue 不提供这样的行为,因为它是作为优先级堆而不是排序列表实现的。来自 javadoc:PriorityQueue
提供的唯一保证是poll()
、peek()
等返回最小元素。如果您需要元素的有序迭代,请使用其他集合,例如TreeSet
。I guess you expect
PriorityQueue
to return elements in particular order when you iterate it. However,PriorityQueue
doesn't provide such a behaviour, because it's implemented as a priority heap rather than sorted list. From javadoc:The only guarantee provided by
PriorityQueue
is thatpoll()
,peek()
, etc return the least element. If you need ordered iteration of elements, use some other collection such asTreeSet
.对于任何想要如何按照顺序迭代队列的人,这可以通过使用 投票 或 删除。
poll()
和remove()
之间的唯一区别是 poll 在为空时返回 null,而 remove 会抛出NoSuchElementException
。For anyone looking how to iterate the queue following the order, this can be achieved by using poll or remove.
The only diference between
poll()
andremove()
, is that poll returns null when is empty and remove throws aNoSuchElementException
.