当前位置: 首页 > 知识库问答 >
问题:

为什么PriorityQueue中的元素没有按其自然顺序打印?[副本]

楚泳
2023-03-14

为什么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);

它给了我:

问:[

sa:[

myList:[

但我期待着:

问:[

请解释一下!!

共有1个答案

丁景山
2023-03-14

从Javadocs:

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

这意味着元素不一定按其自然顺序存储在队列中。因此,如果要按元素的自然顺序获取元素,则必须单独排序或使用队列操作,例如:

while( !q.isEmpty() ) {
    System.out.println(q.remove());
}
 类似资料:
  • 我试图在java中创建一个优先级队列,其中节点的优先级最低。然而,我的比较器不工作,输出非常奇怪。我相信我需要改变我的比较器,但我不知道如何改变它。这是我的代码: 输出如下:[z, k, q, g, v, x, u, d, f, y, b, m, j, i, c, e, s, o, w, a, r, h, p, t, l, a]。 然而,输出应为[z、q、x、j、k、v、b………]。

  • 想要排序这个{爱:2,编码:1,i:2,leetcode:1}结果为{爱:2,love:2,编码:1,leetcode:1}但输出结果为[爱=2,编码=1,i=2,leetcode=1] 有人能解释一下原因吗?

  • 我有几个问题。我正在做家庭作业,但遇到了一些令人困惑的事情。(我上的是入门课,有错误,很抱歉。) 实现一个以整数数组和int x作为其大小的类。在类中创建一个方法,该方法创建一个长度比数据长度大1的新数组。然后创建一个方法,将所有数据元素复制到新数组中,并将x值添加到数组的最后一个元素中。创建一个方法来返回新数组中的所有整数。 这是我的 这只是返回NULL。 我的问题是上面任务的最后一点。“创建一

  • 所以我有这个代码,叫我白痴哈哈,但是我不能让它打印7。 代码: 我需要知道如何改变与函数中的参数同名的变量。 任何帮助都将不胜感激,如果你不明白这个问题,我很乐意解释更多。

  • 有人能解释一下为什么TestClass构造函数没有被调用吗?如果我创建另一个类,但不使用包含main方法的类,它就能工作?