java - 优先级队列不维护排序顺序

标签 java collections

优先级队列不维护排序顺序 我是否没有正确实现Comparable? 输出的排序顺序错误?

import java.util.PriorityQueue;

    class A implements Comparable 
    {
        int i;
        A(int i)
        {
            this.i =  i;

        }
        public int compareTo(Object obj)
        {
            return i - ((A)obj).i;
        }
        public String toString()
        {
            return Integer.toString(i);
        }

    }
    class Manager11
    {
        public static void main(String[] args) 
        {
            PriorityQueue pq =  new PriorityQueue();
            pq.add(new A(9));
            pq.add(new A(5));
            pq.add(new A(8));
            pq.add(new A(19));
            pq.add(new A(1));

            System.out.println(pq);
        }
}

输出: [1,5,8,19,9]

最佳答案

在优先级队列中,唯一的保证是是最低的(或最大的,取决于你的比较)。内部结构不一定是排序列表。实际上,在 Java 中,它是一个堆:

PriorityQueue

An unbounded priority queue based on a priority heap.

但是,如果您执行一个循环来 poll() 第一项,然后一次又一次地打印它,直到优先级队列为空。应从最低到最大元素打印元素。

关于java - 优先级队列不维护排序顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51787067/

相关文章:

android - 了解 Android 垃圾回收

python-3.x - 使用 Pandas 和集合计算每列中某些值的数量

scala - 折叠 Scala 序列中匹配元素的子序列

java - 在 Spring 2.5 中注册关闭钩子(Hook)

java - 此代码的输出不正确,

java - 它如何使用流删除重复对象并从对象字段中减去值?

java - HashMap - 插入新的相等对象后,先前的键仍然存在

java - 对泛型类的非泛型引用导致非泛型返回类型

java - 设计牛津英语词典

java - 服务器保存用户信息