Java Map 按Key排序和按Value排序
时间: 2023-09-05 20:10:31 浏览: 117
Java Map 是一个不保证顺序的集合类。如果需要按照 Key 或 Value 排序,可以通过以下方式实现:
按 Key 排序:
可以将 Map 中的 Entry 对象放到一个 List 中,然后对 List 中的 Entry 对象进行排序,最后将排序后的 Entry 对象重新放回 Map 中。
示例代码如下:
```
Map<String, Integer> map = new HashMap<>();
map.put("a", 3);
map.put("c", 1);
map.put("b", 2);
List<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return o1.getKey().compareTo(o2.getKey());
}
});
Map<String, Integer> sortedMap = new LinkedHashMap<>();
for (Map.Entry<String, Integer> entry : list) {
sortedMap.put(entry.getKey(), entry.getValue());
}
System.out.println(sortedMap); // 输出 {a=3, b=2, c=1}
```
按 Value 排序:
与按 Key 排序类似,也是先将 Map 中的 Entry 对象放到一个 List 中,但是排序时比较的是 Entry 对象的 Value。
示例代码如下:
```
Map<String, Integer> map = new HashMap<>();
map.put("a", 3);
map.put("c", 1);
map.put("b", 2);
List<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return o1.getValue().compareTo(o2.getValue());
}
});
Map<String, Integer> sortedMap = new LinkedHashMap<>();
for (Map.Entry<String, Integer> entry : list) {
sortedMap.put(entry.getKey(), entry.getValue());
}
System.out.println(sortedMap); // 输出 {c=1, b=2, a=3}
```
需要注意的是,排序后的 Map 仍然是一个不保证顺序的集合类,只是按照 Key 或 Value 排序了。如果需要保证顺序,可以使用 LinkedHashMap。
阅读全文