📅  最后修改于: 2023-12-03 15:25:54.865000             🧑  作者: Mango
在 Java 中,我们可以利用 HashMap 存储键和值对。但假如我们需要对这些键和值进行排序呢?本文将介绍如何利用 Java 中的 TreeMap 实现按键和值对 HashMap 进行排序。
首先,我们需要先创建一个 HashMap 并向其中添加键和值:
HashMap<String, Integer> hashMap = new HashMap<>();
hashMap.put("apple", 5);
hashMap.put("banana", 2);
hashMap.put("orange", 3);
hashMap.put("watermelon", 7);
接下来,我们可以创建一个 TreeMap 并将 HashMap 中的所有键和值对添加到其中:
TreeMap<String, Integer> sortedTreeMap = new TreeMap<>();
sortedTreeMap.putAll(hashMap);
这样,我们就创建了一个按键和值对排序的 TreeMap。我们可以输出 TreeMap 中的所有键和值:
for (Map.Entry<String, Integer> entry : sortedTreeMap.entrySet()) {
System.out.println(entry.getKey() + " : " + entry.getValue());
}
这将输出:
apple : 5
banana : 2
orange : 3
watermelon : 7
需要注意的是,我们是按照键的字典序进行排序的。如果需要按照值进行排序,可以考虑使用 Comparator 进行比较。以下是对值进行排序的代码:
List<Map.Entry<String, Integer>> list = new LinkedList<>(hashMap.entrySet());
Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return (o2.getValue()).compareTo(o1.getValue());
}
});
HashMap<String, Integer> sortedHashMapByValue = new LinkedHashMap<>();
for (Map.Entry<String, Integer> entry : list) {
sortedHashMapByValue.put(entry.getKey(), entry.getValue());
}
System.out.println(sortedHashMapByValue);
这段代码首先将 HashMap 转换为一个键值对列表 List<Map.Entry<String, Integer>>
,然后利用 Collections 中的 sort()
方法和一个自定义的比较器按值进行排序。最后,我们创建了一个按值排序的 LinkedHashMap 并将排序后的列表填充到其中。
这将输出 {watermelon=7, apple=5, orange=3, banana=2}
,也就是按值从大到小排序后的 HashMap。
以上就是按键和值对 HashMap 进行排序的 Java 程序的介绍。请注意此程序的时间复杂度为 O(nlogn)。