gpt4 book ai didi

java - PriorityQueue 在添加时未排序

转载 作者:行者123 更新时间:2023-12-01 18:35:06 28 4
gpt4 key购买 nike

我有一个优先级队列,我在其中添加一个节点对象,其中节点应按它们包含的值排序。由于某种原因,优先级队列不会在添加时对节点进行排序。如果有人能发现其中的问题或有任何指导,我很感激。这是一个简短的示例:

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;
}

最佳答案

我猜您希望 PriorityQueue 在迭代时按特定顺序返回元素。但是,PriorityQueue 不提供这样的行为,因为它是作为优先级堆而不是排序列表实现的。来自 javadoc :

The Iterator provided in method iterator() is not guaranteed to traverse the elements of the priority queue in any particular order. If you need ordered traversal, consider using Arrays.sort(pq.toArray()).

PriorityQueue 提供的唯一保证是 poll()、peek() 等返回最小元素。如果您需要元素的有序迭代,请使用其他集合,例如 TreeSet

关于java - PriorityQueue 在添加时未排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60076273/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com