首页 >Java >java教程 >在 Java 中如何按值对 TreeMap 进行排序?

在 Java 中如何按值对 TreeMap 进行排序?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-21 16:16:12234浏览

How Can I Sort a TreeMap by its Values in Java?

按值对 TreeMap 进行排序

简介:

在 TreeMap 中,元素是排序的基于它们的自然顺序,可以是键或值,具体取决于实现。但是,可以使用比较器根据其条目的值对 TreeMap 进行排序。

解决方案:

您不能直接根据 TreeMap 的值对 TreeMap 进行排序。您尝试使用 byValue 比较器的语法不正确。

但是,您可以通过创建包含 TreeMap 条目的自定义 SortedSet 来实现所需的功能。这个SortedSet可以使用entriesSortedByValues()方法创建:

static <K,V extends Comparable<? super V>>
SortedSet<Map.Entry<K,V>> entriesSortedByValues(Map<K,V> map) {
    SortedSet<Map.Entry<K,V>> sortedEntries = new TreeSet<>(
        new Comparator<Map.Entry<K,V>>() {
            @Override public int compare(Map.Entry<K,V> e1, Map.Entry<K,V> e2) {
                int res = e1.getValue().compareTo(e2.getValue());
                return res != 0 ? res : 1;
            }
        }
    );
    sortedEntries.addAll(map.entrySet());
    return sortedEntries;
}

此方法采用一个值为Comparable的Map,并返回一个按条目值排序的Map.Entry的SortedSet。

使用此方法:

Map<String, Integer> map = new TreeMap<>();
map.put("A", 3);
map.put("B", 2);
map.put("C", 1); 

System.out.println(map); // prints "{A=3, B=2, C=1}"

SortedSet<Map.Entry<String,Integer>> sortedEntries = entriesSortedByValues(map);
System.out.println(sortedEntries); // prints "[C=1, B=2, A=3]"

关于整数的注意事项相等:

使用 == 比较整数值时,它检查引用相等,而不是值相等。推荐使用 equals() 方法比较 Integer 值是否相等。

以上是在 Java 中如何按值对 TreeMap 进行排序?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn