首页 > 解决方案 > 为什么 PriorityQueue 在 Java 中不按数字排序?

问题描述

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

例如。想要排序这个 {"love":2,"coding":1,"i":2,"leetcode":1} 结果为 {"i":2,"love":2,"coding":1 ,"leetcode":1} 但输出结果是 [love=2, coding=1, i=2, leetcode=1]

有人可以帮忙解释为什么吗?

标签: java

解决方案


  1. 您需要颠倒减去值的顺序以获得降序。
  2. 您实际上需要删除所有元素才能查看顺序。
  3. 使用这些Comparator.comparing方法可以更清楚、更简洁地编写比较器。
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());
}

推荐阅读