【问题标题】:Why are elements in a PriorityQueue not printed in their natural ordering? [duplicate]为什么 PriorityQueue 中的元素没有按自然顺序打印? [复制]
【发布时间】:2020-05-06 19:07:28
【问题描述】:

为什么PriorityQueue 对字符串进行不同的排序?

String[] sa = {">ff<", "> f<", ">f <", ">FF<", "> 2<", ">2 <", "> F<"};
PriorityQueue<String> q = new PriorityQueue<>();
for(String s : sa) {
    q.offer(s);
}
System.out.println("q : " +q);
Arrays.sort(sa);
System.out.println("sa : " +Arrays.toString(sa));

List<String> myList = Arrays.asList(sa);
Collections.sort(myList);
System.out.println("myList : " +myList);

它给了我:

q : [> 2 f FffFFf 2

sa : [> 2 F f2 FFf ff

myList : [> 2 F f2 FFf ff

但我期待:

q : [> 2 F f2 FFf ff

请解释一下!!

【问题讨论】:

    标签: java string sorting priority-queue


    【解决方案1】:

    来自Javadocs

    方法 iterator() 中提供的迭代器不能保证以任何特定顺序遍历优先级队列的元素。如果您需要有序遍历,请考虑使用 Arrays.sort(pq.toArray())。

    这意味着元素不一定按自然顺序存储在队列中。所以如果你想按自然顺序获取元素,你必须单独排序或者使用队列操作,例如:

    while( !q.isEmpty() ) {
        System.out.println(q.remove());
    }
    

    【讨论】:

      猜你喜欢
      • 2018-05-01
      • 2015-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-15
      • 2021-07-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多