优先队列不维护排序顺序

Swa*_*nil 2 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);
        }
}
Run Code Online (Sandbox Code Playgroud)

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

Max*_*amy 6

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

优先队列

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

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

  • `PriorityQueue.toString()` 中没有这样的保证:`AbstractCollection.toString` 说:“字符串表示由集合元素的列表组成,按照它们由迭代器返回的顺序排列”;PriorityQueue 说:“方法 iterator() 中提供的 Iterator 不能保证以任何特定顺序遍历优先级队列的元素。”。最底层的元素首先出现只是一个实现细节。 (2认同)