Java HashMap排序

简介: HashMap排序可以分为按键排序与按值排序两种,实现思路是先转为List容器,再重写比较函数,调用java内置排序算法即可。

HashMap排序可以分为按键排序与按值排序两种,实现思路是先转为List容器,再重写比较函数,调用java内置排序算法即可。

示例代码如下(使用时根据需要修改map容器类型):

        HashMap<String, Double> map = new HashMap<String, Double>();
		map.put("key1", Math.random() * 100);
		map.put("key4", Math.random() * 100);
		map.put("key3", Math.random() * 100);
		map.put("key5", Math.random() * 100);
		map.put("key2", Math.random() * 100);
		
		List<Map.Entry<String, Double>> mapList = 
				new ArrayList<Map.Entry<String, Double>>(map.entrySet()); 
		
//		排序前打印
		System.out.println("排序前");
		for (Map.Entry<String, Double> entry : mapList) {
			System.out.println(entry.toString());
		}
		System.out.println();

		Collections.sort(mapList, new Comparator<Map.Entry<String, Double>>() {
			public int compare(Map.Entry<String, Double> obj1, Map.Entry<String, Double> obj2) {
				// 请使用内置比较函数, 否则可能会报错, 违反使用约定
				// 具体要满足交换律, 即返回值compare(x, y)与compare(y, x)应一致
				return obj1.getValue().compareTo(obj2.getValue()); // 比较map值
//				return obj1.getKey().compareTo(obj2.getKey()); // 比较map键
			}
		});
		
//		排序后打印
		System.out.println("排序后");
		for (Map.Entry<String, Double> entry : mapList) {
			System.out.println(entry.toString());
		}
按值排序结果:

排序前
key1=40.189446938991416
key2=97.14547760681302
key5=39.86978413432413
key3=44.246717054280374
key4=65.19003398617575

排序后
key5=39.86978413432413
key1=40.189446938991416
key3=44.246717054280374
key4=65.19003398617575
key2=97.14547760681302


按键排序结果:

排序前
key1=71.17675919899192
key2=88.06383506265738
key5=17.37417655482928
key3=1.89149771013285
key4=72.09130459451002

排序后
key1=71.17675919899192
key2=88.06383506265738
key3=1.89149771013285
key4=72.09130459451002
key5=17.37417655482928


目录
相关文章
|
8天前
|
存储 Java 测试技术
滚雪球学Java(66):Java之HashMap详解:深入剖析其底层实现与源码分析
【6月更文挑战第20天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
18 3
滚雪球学Java(66):Java之HashMap详解:深入剖析其底层实现与源码分析
|
7天前
|
存储 算法 Java
Java查找算法概览:二分查找适用于有序数组,通过比较中间元素缩小搜索范围;哈希查找利用哈希函数快速定位,示例中使用HashMap存储键值对,支持多值关联。
【6月更文挑战第21天】Java查找算法概览:二分查找适用于有序数组,通过比较中间元素缩小搜索范围;哈希查找利用哈希函数快速定位,示例中使用HashMap存储键值对,支持多值关联。简单哈希表实现未涵盖冲突解决和删除操作。
15 1
|
15天前
|
Java
Java集合-----HashMap实例
Java集合-----HashMap实例
19 5
|
14天前
|
存储 安全 Java
深入解析Java HashMap的高性能扩容机制与树化优化
深入解析Java HashMap的高性能扩容机制与树化优化
11 1
|
25天前
|
搜索推荐 算法 Java
【Java基础】 几种简单的算法排序
几种简单的JAVA算法排序
28 4
|
23天前
|
存储 算法 Java
【经典算法】 leetcode88.合并排序的数组(Java/C/Python3实现含注释说明,Easy)
【经典算法】 leetcode88.合并排序的数组(Java/C/Python3实现含注释说明,Easy)
12 1
|
24天前
|
存储 算法 Java
Java性能优化(三):Java基础-HashMap的设计与优化
HashMap核心特性数据结构:HashMap采用哈希表数据结构来存储键值对,利用哈希函数和哈希表快速定位元素位置,提供高效的键值对查询。参数设置初始容量:HashMap允许用户根据使用场景设定初始容量,以优化性能。在预知数据量时,可以通过计算(初始容量=预知数据量/加载因子)来设定合适的初始容量,以减少扩容操作,提高效率。加载因子:加载因子定义了哈希表何时进行扩容的阈值。加载因子较小时,哈希表会更早地进行扩容,减少哈希冲突;加载因子较大时,会提高内存利用率但可能增加哈希冲突。
17 2
|
2天前
|
算法 Java 调度
Java数据结构与算法:拓扑排序
Java数据结构与算法:拓扑排序
|
3天前
|
缓存 算法 Java
Java中如何处理大数据量的排序?
Java中如何处理大数据量的排序?
|
4天前
|
Java
java使用HashMap对文件进行排序并输出
java使用HashMap对文件进行排序并输出
6 0