【问题标题】:Does PriorityQueue maintain natural order? [duplicate]PriorityQueue 是否保持自然顺序? [复制]
【发布时间】:2015-07-08 11:15:49
【问题描述】:

优先级队列的元素按照它们的顺序排列 自然排序,或由队列构造时提供的比较器 时间,取决于使用的构造函数。

但是,在下面的示例中,当我一次打印整个队列时,队列的元素以随机顺序打印。另一方面,如果我逐个轮询元素,它们会按自然顺序打印。

有人能解释一下这种模棱两可的行为吗?还是我错过了什么?

public class QueueExample {


    public static class Employee implements Comparable<Employee>{
        private int id;
        private String name;

        public Employee(int id, String name){
            this.id=id;
            this.name=name;
        }

        public String toString(){
            return "id:"+id+" name:"+name;
        }

        public int compareTo(Employee emp){
            return name.compareTo(emp.name);
        }

    }

    public static void main(String[] args) {


        Queue<Employee> priority=new PriorityQueue<Employee>();

        priority.add(new Employee(101, "Atlas"));
        priority.add(new Employee(102, "Ztlas"));
        priority.add(new Employee(101, "Ftlas"));
        priority.add(new Employee(101, "Ptlas"));

        System.out.println(priority);

        System.out.println(priority.poll());
        System.out.println(priority.poll());
        System.out.println(priority.poll());
        System.out.println(priority.poll());

    }

}

输出:

[id:101 name:Atlas, id:101 name:Ptlas, id:101 name:Ftlas, id:102 名称:Ztlas]

id:101 名称:地图集

id:101 名称:Ftlas

id:101 名称:Ptlas

id:102 名称:Ztlas

【问题讨论】:

    标签: java collections queue priority-queue comparable


    【解决方案1】:

    the documentation 的下方写着:

    方法 iterator() 中提供的迭代器不保证以任何特定顺序遍历优先级队列的元素。

    由于AbstractCollectiontoStringPriorityQueue 继承)以迭代顺序返回一个字符串,因此您不会从中得到特定的顺序。

    【讨论】:

      猜你喜欢
      • 2015-05-05
      • 2013-07-15
      • 2020-05-06
      • 2013-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多