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

为什么PriorityQueue在Java中不按数字排序?[副本]

方祺
2023-03-14
PriorityQueue<Pair<String, Integer>> pq = new PriorityQueue<>(
                 (a,b) -> a.getValue()==b.getValue() ? b.getKey().compareTo(a.getKey()) : a.getValue()-b.getValue()
        );

想要排序这个{爱:2,编码:1,i:2,leetcode:1}结果为{爱:2,love:2,编码:1,leetcode:1}但输出结果为[爱=2,编码=1,i=2,leetcode=1]

有人能解释一下原因吗?

共有1个答案

梁磊
2023-03-14
  1. 您需要颠倒减去值的顺序以获得降序
  2. 实际上,您需要删除所有元素才能查看顺序
  3. 使用比较器可以更清晰、简洁地编写比较器。比较方法
PriorityQueue<Pair<String, Integer>> pq = new PriorityQueue<>(
    Comparator.comparing((Pair<String, Integer> p)->p.getValue())
      .reversed().thenComparing(Pair::getKey));
while(!pq.isEmpty()){
    System.out.println(pq.poll());
}
 类似资料:
  • 为什么对字符串排序不同? 它给了我: 问:[ sa:[ myList:[ 但我期待着: 问:[ 请解释一下!!

  • 我创建了这个随机生成的arraylist,它生成1-50个数字。我想按升序对生成的数字进行排序。不使用集合。sort,我如何使用ArrayList进行排序?

  • 问题内容: 我最近从Python 2.7切换到Python 3.3,似乎在Python 2中字典键的顺序是任意的,但是是一致的,而在Python 3中,使用例如获得的字典键的顺序似乎是不确定的。 如果我运行: 在Python 2.7和Python 3.3中,则: Python 2.7一直给我 使用Python 3.3,我可以获得任何随机顺序–例如: [‘doc’, ‘dict’, ‘qualnam

  • 我试图在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………]。

  • 问题内容: 哪个实现不太“繁重”:PriorityQueue或排序的LinkedList(使用Comparator)? 我想对所有项目进行排序。插入将非常频繁,有时我将必须运行所有列表以进行一些操作。 问题答案: A 是最糟糕的选择。要么使用(或更一般地说,是一个实现者),要么。如果确实使用列表,则仅在遍历列表内容之前对其进行排序,而不是在每次插入之后对其进行排序。 有一点要注意的是,迭代器 不

  • 如何将按排序顺序转换为而不更改()?我们希望保留和。 将2,3,1添加到将其排序为1,2,3。从创建一个将具有2,3,1的顺序。中的和方法也将具有2,3,1的顺序。我猜这与的实现有关。