📜  按键和值对 HashMap 进行排序的Java程序(1)

📅  最后修改于: 2023-12-03 15:25:54.865000             🧑  作者: Mango

按键和值对 HashMap 进行排序的 Java 程序

在 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)。