欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

map集合排序

程序员文章站 2024-02-15 17:23:58
...

写东西时遇到一个问题,要将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();
		}
	}

结果:

map集合排序


相关标签: 集合