我所做的就是在Java PriorityQueue中添加三个字符串,然后将它们打印出来 这是我的代码:
import java.util.*;
import java.lang.*;
class Main
{
public static void main (String[] args) throws java.lang.Exception
{
PriorityQueue<String> pq=new PriorityQueue<String>();
pq.add("abc");
pq.add("ability");
pq.add("aberdeen");
String s="ability";
System.out.println(s.compareTo("aberdeen"));
System.out.println(pq);
}
}
这是输出:
4
[abc, ability, aberdeen]
不应该是abc, aberdeen, ability
。既然这是正确的字母顺序?
答案 0 :(得分:10)
来自PriorityQueue.iterator()
的文档:
返回此队列中元素的迭代器。迭代器不会以任何特定顺序返回元素。
这是toString()
用于构造字符串表示的内容,因为实现是inherited from AbstractCollection
:
返回此集合的字符串表示形式。字符串表示由一个集合元素的列表组成,它们的迭代器返回它们的顺序,用方括号(“[]”)括起来。 [...]
尝试将结果出列,然后您将获得预期的顺序:
while (pq.size() > 0) {
System.out.println(pq.poll());
}
输出:
abc
aberdeen
ability
答案 1 :(得分:4)
队列正常运行。运行以下代码:
PriorityQueue<String> pq=new PriorityQueue<String>();
pq.add("abc");
pq.add("ability");
pq.add("aberdeen");
System.out.println(pq);
for (String s; (s = pq.poll()) != null;) System.out.println(s);
会打印
[abc, ability, aberdeen]
abc
aberdeen
ability
原因在于优先级语义仅适用于出列操作,而在其他方面,队列仅受普通java.util.Collection
的约束约束:其迭代器不需要观察任何特定的顺序,具体而言,PriorityQueue
的迭代器恰好遵守了插入顺序。