map集合排序

写东西时遇到一个问题,要将HashMap按照value的值来进行排序。


百度了一下,膜拜了一下大佬的博客 map集合排序

但是感觉有些繁琐,因为比较菜,对Comparator比较器不熟悉,就自己想了一种易于理解办法。

场景是这样的,一个Map中,泛型为<String,Double>,现在要按照value从大到小对这个集合排序,而且value值可能有相同的,所以

没办法将它反着放进另外一个Map中,因为Map中key不能相同。

思路是:

建立一个二维数组,行数为2,列数为value的个数,即map.size()。遍历集合,将每一个value依次放入第一行,将每一个key依次放入第二行与之对应。这样就形成了一种对应关系,然后对第一行中的value进行排序,当要移动value时,把与之对应的key也跟着移动即可。

代码:

@org.junit.Test
	public void test() throws IOException{
		Map<String,Double> map=new LinkedHashMap<String,Double>();
		map.put("101", 1.1);
		map.put("103", 0.1);
		map.put("104", 2.1);
		map.put("105", 4.1);
		map.put("102", 3.1);
		
		Double sort[][]=new Double[2][map.size()];
		int n=0;
		for(Entry<String,Double> e:map.entrySet()){//将value、key依次对应存入数组
			sort[0][n]=e.getValue();
			sort[1][n++]=Double.valueOf(e.getKey());
		}
		for(int i=0;i<map.size()-1;i++){//这里采用冒泡排序 复杂度取决于你用的排序方法
			for(int j=i+1;j<map.size();j++){
				if(sort[0][i]<sort[0][j]){
					double t;
					//交换value
					t=sort[0][i];
					sort[0][i]=sort[0][j];
					sort[0][j]=t;
					//交换key
					t=sort[1][i];
					sort[1][i]=sort[1][j];
					sort[1][j]=t;
				}
			}
		}
		//也可以将结果再存入集合们这里直接输出
		System.out.println("排序后:");
		for(int i=0;i<2;i++){
			for(int j=0;j<map.size();j++){
				if(i!=1){
					System.out.print(sort[i][j]+"\t");
				}else{
					System.out.print(String.valueOf(sort[i][j])+"\t");
				}
			}
			System.out.println();
		}
	}

结果:




  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值