java - PriorityQueue 未在添加时排序

标签 java sorting priority-queue

我有一个优先队列,我在其中添加了一个节点对象,节点应该按它们包含的值排序。由于某种原因,优先级队列不会在添加时对节点进行排序。如果有人对此有任何问题或有任何指导,我将不胜感激。下面是一个简单的例子:

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/5695017/

相关文章:

java - 关于Java中的接口(interface)和泛型的问题: type mismatch error

java - 复杂的字符串匹配

java - 当用户在Java中输入数组大小时,如何生成从0到100的随机数而不重复?

c++ - 为什么程序看不到全局变量?

c++ - 从 priority_queue 弹出时出现排序问题,这是 std::priority_queue 的错误吗

java - Maven 在 "mvn site"期间抛出错误,但在 "mvn compile"/"mvn test"下工作正常

java - Collections.sort 带有 2 个数组

javascript - 是否必须使用比较函数对数字数组进行排序?

C++ STL优先级队列构造函数

java - java中的动态方法调度