How to Sort HashMap by Value

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

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

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

Java Collections.sort() 方法

Java Collections 类提供了一个方法来排序所有 List 实现,例如 LinkedListArrayList。有两个重载的 sort 方法:

  • sort(List list):它根据元素的自然顺序升序排序 List 中的元素。
  • sort(List list, Comparator <T>): 它根据 Comparator 指定的顺序对 List 中的元素进行排序。

语法

该方法不返回任何值。它抛出以下异常:

ClassCastException:如果 List 包含无法相互比较的元素。

UnsupportedOperationException:如果指定 List 的 ListIterator 不支持 set 操作。

按键和按值排序 HashMap 的区别在于,HashMap 可以有重复的值,但不能有重复的键。我们不能使用 TreeMap 来排序值,因为 TreeMap 是按键排序元素的。

按值排序 HashMap 的示例

在下面的示例中,我们按升序和降序对 Map 进行了排序。

输出

Before sorting: 
Company	 Price	
Dell		32000
HP		20000
Lenovo	19990
Samsung	36546
Apple		65000
Asus		21478


Sorting values in ascending order:
Company	 Price	
Lenovo	19990
HP		20000
Asus		21478
Dell		32000
Samsung	36546
MAC Book	65000


Sorting values in descending order:
Company	 Price	
MAC Book	65000
Samsung	36546
Dell		32000
Asus		21478
HP		20000
Lenovo	19990

下一个主题Java 教程