map集合排序

来源:互联网 发布:广电网络运维体系建设 编辑:程序博客网 时间:2024/06/07 16:59

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


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


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


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


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


思路是:

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

代码:

@org.junit.Testpublic 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;//交换valuet=sort[0][i];sort[0][i]=sort[0][j];sort[0][j]=t;//交换keyt=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();}}

结果:




原创粉丝点击