首页 > 解决方案 > 优先队列未保持排序顺序

问题描述

优先级队列没有保持排序顺序 我是否没有正确实施 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]

标签: javacollections

解决方案


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

优先队列

基于优先级堆的无界优先级队列。

但是,如果您poll()对第一项进行循环,则一次又一次地打印它,直到优先级队列为空。元素应该从最小到最大的元素打印。


推荐阅读