如果想要对 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睿哥
mikechen睿哥,十余年BAT架构经验,资深技术专家,就职于阿里、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》