How to Sort HashMap in Java

2024 年 9 月 10 日 | 阅读 3 分钟

Java HashMap 默认情况下不保留任何顺序。如果需要对 HashMap 进行排序,我们会根据具体要求显式地进行排序。Java 提供了根据键和值对 HashMap 进行排序的选项。在本节中,我们将学习如何根据键和值对 HashMap 进行排序。

  • 按键对 HashMap 进行排序
  • 按值对 HashMap 进行排序

按键对 HashMap 进行排序

有以下几种按键对 HashMap 进行排序的方法:

  • 使用 TreeMap
  • 使用 LinkedHashMap

当我们使用 LinkedHashMap 时,我们应该遵循以下过程:

当我们使用 LinkedHashMap 时,我们需要获取键集。将 Set 转换为 List,对 List 进行排序,然后按照相同的顺序将排序后的 List 添加到 LinkedHashMap 中。我们已经在示例 按值对 HashMap 进行排序 中完成了相同的过程。

按键对 HashMap 进行排序的示例

在以下示例中,我们使用 TreeMap 构造函数对元素进行排序,并将 HashMap 类的对象作为参数传递。这是按键对 HashMap 进行排序的最简单方法。

输出

Before Sorting
Roll no:  17     name:   Arun
Roll no:  23     name:   Yash
Roll no:  9     name:   Neelesh
Roll no:  15     name:   Swarit

After Sorting
Roll no:  9     name:   Neelesh
Roll no:  15     name:   Swarit
Roll no:  17     name:   Arun
Roll no:  23     name:   Yash

使用 Comparator 接口按值对 HashMap 进行排序

在 Java 中,按值对 HashMap 进行排序比较复杂,因为没有直接可用的方法。要按值对 HashMap 进行排序,我们需要创建一个 Comparator。它根据值比较两个元素。

之后,从 Map 中获取元素集,并将 Set 转换为 List。使用 Collections.sort(List) 方法,通过传递自定义比较器来按值对元素列表进行排序。现在创建一个新的 LinkedHashMap 并将排序后的元素复制到其中。由于 LinkedHashMap 保证了映射的插入顺序。我们得到了一个值已排序的 HashMap。

按键和按值对 HashMap 进行排序之间有一个细微的差别,即按值排序时可以有重复的值,但不能有重复的键。我们不能使用 TreeMap 来对值进行排序,因为 TreeMap 是按键对元素进行排序的。

按值对 HashMap 进行排序的示例

输出

Before Sorting:
Roll no:  1     Name:   Ritesh
Roll no:  67   Name:   Boby
Roll no:  5     Name:   Zoya
Roll no:  6     Name:   Tushar
Roll no:  10   Name:   Praveen
Roll no:  12   Name:   Ashu
Roll no:  78   Name:   Yash

After Sorting:
Roll no:  12     Name:   Ashu
Roll no:  67     Name:   Boby
Roll no:  10     Name:   Praveen
Roll no:  1       Name:   Ritesh
Roll no:  6       Name:   Tushar
Roll no:  78     Name:   Yash
Roll no:  5       Name:   Zoya

下一个主题Java 教程