如何将HashMap,按照value值排序

本文详细介绍了如何使用Comparator接口中的compare方法实现Map.Entry对象的逆序排序,通过创建自定义Comparator类并传入Collections.sort方法中,从而实现从大到小的排序效果。此外,还提供了一个完整的示例程序来展示排序过程。
摘要由CSDN通过智能技术生成

原帖地址

http://blog.csdn.net/exceptional_derek/article/details/9852929

这里要用到一个Comparator的接口,里面只有一个方法,compare(),我们实现这个接口就好,很简单

[java]  view plain copy
  1. private class ValueComparator implements Comparator<Map.Entry<String, Integer>>    
  2.         {    
  3.             public int compare(Map.Entry<String, Integer> mp1, Map.Entry<String, Integer> mp2)     
  4.             {    
  5.                 return mp2.getValue() - mp1.getValue();    
  6.             }    
  7.         }    
这里为啥用mp2-mp1呢,因为我想要的排序结果是从大到小,默认的是从小到大排序。这样调换一下位置就不要再写一个循环,倒叙输出了。

使用的时候也很简单,调用Collections工具类的sort方法时,传入我们自己写的这个实现类的对象,作为参数就可以了。先根据实际需求,创建一个List。

[java]  view plain copy
  1. Map<String,Integer> map=new HashMap<>();  
  2.         List<Map.Entry<String,Integer>> sort=new ArrayList<>();  
然后直接就可以排序啦。

[java]  view plain copy
  1. sort.addAll(map.entrySet());  
  2.         ValueComparator vc=new ValueComparator();  
  3.         Collections.sort(sort,vc);  

很简单吧。

下面附上一个完整的小程序

[java]  view plain copy
  1. import java.util.*;  
  2. class Test  
  3. {  
  4.     private static class ValueComparator implements Comparator<Map.Entry<String,Integer>>  
  5.     {  
  6.         public int compare(Map.Entry<String,Integer> m,Map.Entry<String,Integer> n)  
  7.         {  
  8.             return n.getValue()-m.getValue();  
  9.         }  
  10.     }  
  11.     public static void main(String[] args)   
  12.     {  
  13.         Map<String,Integer> map=new HashMap<>();  
  14.         map.put("a",1);  
  15.         map.put("c",3);  
  16.         map.put("b",5);  
  17.         map.put("f",7);  
  18.         map.put("e",6);  
  19.         map.put("d",8);  
  20.         List<Map.Entry<String,Integer>> list=new ArrayList<>();  
  21.         list.addAll(map.entrySet());  
  22.         Test.ValueComparator vc=new ValueComparator();  
  23.         Collections.sort(list,vc);  
  24.         for(Iterator<Map.Entry<String,Integer>> it=list.iterator();it.hasNext();)  
  25.         {  
  26.             System.out.println(it.next());  
  27.         }  
  28.     }  
  29. }  

输出:

d=8
f=7
e=6
b=5
c=3
a=1


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>