Java 中对 Map 的 Key 进行排序
在 Java 中,Map 本身是无序的(除了 LinkedHashMap 会保持插入顺序),如果你需要对 Map 的 key 进行排序,有以下几种常见方法:

(图片来源网络,侵删)
使用 TreeMap(自动排序)
TreeMap 会根据其 key 的自然顺序或提供的 Comparator 自动排序。
import java.util.*;
public class MapSortExample {
public static void main(String[] args) {
// 创建一个普通 HashMap
Map<String, Integer> map = new HashMap<>();
map.put("Banana", 3);
map.put("Apple", 1);
map.put("Orange", 2);
map.put("Grape", 4);
// 使用 TreeMap 自动按 key 排序(自然顺序)
Map<String, Integer> sortedMap = new TreeMap<>(map);
// 打印排序后的 Map
sortedMap.forEach((k, v) -> System.out.println(k + ": " + v));
}
}
使用 Comparator 自定义排序
如果需要自定义排序规则,可以提供 Comparator:
import java.util.*;
public class CustomSortExample {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("Banana", 3);
map.put("Apple", 1);
map.put("Orange", 2);
map.put("Grape", 4);
// 使用自定义 Comparator 排序(按 key 长度)
Map<String, Integer> sortedMap = new TreeMap<>(Comparator.comparingInt(String::length));
sortedMap.putAll(map);
// 打印排序后的 Map
sortedMap.forEach((k, v) -> System.out.println(k + ": " + v));
}
}
使用 Java 8 Stream API 排序
如果你不想修改原始 Map,可以使用 Stream API 创建一个排序后的新 Map:
import java.util.*;
import java.util.stream.*;
public class StreamSortExample {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("Banana", 3);
map.put("Apple", 1);
map.put("Orange", 2);
map.put("Grape", 4);
// 使用 Stream API 排序并收集到 LinkedHashMap(保持顺序)
Map<String, Integer> sortedMap = map.entrySet().stream()
.sorted(Map.Entry.comparingByKey())
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
(oldValue, newValue) -> oldValue,
LinkedHashMap::new
));
// 打印排序后的 Map
sortedMap.forEach((k, v) -> System.out.println(k + ": " + v));
}
}
降序排序
要按 key 降序排序:

(图片来源网络,侵删)
// 使用 Stream API 降序排序
Map<String, Integer> sortedMap = map.entrySet().stream()
.sorted(Map.Entry.comparingByKey(Comparator.reverseOrder()))
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
(oldValue, newValue) -> oldValue,
LinkedHashMap::new
));
注意事项
TreeMap的排序是实时的,每次修改都会重新排序- 使用 Stream API 排序时,
LinkedHashMap可以保持排序后的顺序 - key 是自定义对象,需要确保实现了
Comparable接口或提供适当的Comparator
选择哪种方法取决于你的具体需求,比如是否需要保持原始 Map 不变,以及是否需要频繁更新 Map。
