今天写算法题的时候遇到了map的排序,记录一下
1.对map的key进行排序
最简单的就是利用TreeMap,TreeMap默认为升序排序,如果需要降序,调用descendingMap()方法即可,代码如下:
public static void main(String[] args) {
// 默认按照key值正序排列
Map<String, Integer> treeMap = new TreeMap<>();
// 按照key值倒序排列
// Map<Object, Object> treeMap = new TreeMap<>().descendingMap();
treeMap.put("b", 3);
treeMap.put("c", 4);
treeMap.put("a", 7);
treeMap.put("d", 1);
for (Map.Entry<Object, Object> entry : treeMap.entrySet()) {
System.out.println("Key=" + entry.getKey() + ", Value=" + entry.getValue());
}
}
//输出为
Key=a, Value=7
Key=b, Value=3
Key=c, Value=4
Key=d, Value=1
2.对map的value进行排序
将map的entry转化为list,通过sort()方法进行排序后输出,此方法同样适用于TreeMap,代码如下:
public static void main(String[] args) {
Map<String, Integer> hashMap = new HashMap<>();
hashMap.put("b", 3);
hashMap.put("c", 4);
hashMap.put("a", 7);
hashMap.put("d", 1);
// 转换成list
List<Map.Entry<String, Integer>> list = new ArrayList<>(hashMap.entrySet());
Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
// 升序排序
@Override
public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {
return o1.getValue().compareTo(o2.getValue());
}
});
// 初始排列顺序
System.out.println("初始顺序为");
for (Map.Entry<String, Integer> entry : hashMap.entrySet()) {
System.out.println("Key=" + entry.getKey() + ", Value=" + entry.getValue());
}
System.out.println("---------");
// 按照value排序后输出
System.out.println("value排序后顺序为");
for (Map.Entry<String, Integer> entry : list) {
System.out.println("Key=" + entry.getKey() + ", Value=" + entry.getValue());
}
}
//输出为
初始顺序为
Key=a, Value=7
Key=b, Value=3
Key=c, Value=4
Key=d, Value=1
---------
value排序后顺序为
Key=d, Value=1
Key=b, Value=3
Key=c, Value=4
Key=a, Value=7