HashMap排序详解(3种常见排序方式)

HashMap排序详解(3种常见排序方式)-mikechen

如果想要对 HashMap 进行排序,通常需要先将其转换为有序的集合,然后再进行排序操作,下面是常见的 HashMap 排序。

1.使用 TreeMap 将 HashMap 转换为有序 Map

TreeMap 是一种基于红黑树的有序 Map,它可以将 HashMap 中的键值对按照键的自然顺序或者自定义顺序进行排序。

可以通过以下代码实现:

Map<K, V> hashMap = new HashMap<>();
// 将 hashMap 转换为 TreeMap
Map<K, V> treeMap = new TreeMap<>(hashMap);

 

2.将 HashMap 转换为 List,然后排序

可以先将 HashMap 中的键值对转换为 List,然后排序。

如下所示:

Map<K, V> hashMap = new HashMap<>();
List<Map.Entry<K, V>> list = new ArrayList<>(hashMap.entrySet());
Collections.sort(list, new Comparator<Map.Entry<K, V>>() {
    public int compare(Map.Entry<K, V> o1, Map.Entry<K, V> o2) {
        // 根据需要定义排序方式
        return o1.getValue().compareTo(o2.getValue());
    }
});
Map<K, V> sortedMap = new LinkedHashMap<>();
for (Map.Entry<K, V> entry : list) {
    sortedMap.put(entry.getKey(), entry.getValue());
}

通过自定义的排序方式对 List 进行排序,最后再将排序后的 List 转换为 HashMap。

 

3.使用 Java 8 的 Stream API 进行排序

Java 8 引入了 Stream API,它提供了一种便捷的方式对集合进行排序。

如下所示:

Map<K, V> hashMap = new HashMap<>();
Map<K, V> sortedMap = hashMap.entrySet()
        .stream()
        .sorted(Map.Entry.comparingByValue())
        .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
                (oldValue, newValue) -> oldValue, LinkedHashMap::new));

上述代码中,使用 comparingByValue() 方法对 Map.Entry 进行排序,然后使用 collect() 方法将排序后的结果收集到 LinkedHashMap 中,以保留原始的插入顺序。

以上就是3种常见的HashMap排序详解,更多HashMap内容,请查看:HashMap底层实现原理(图文超详解)

作者简介

陈睿|mikechen,10年+大厂架构经验,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法