HashMap排序

转载自:http://blog.csdn.net/memray/article/details/8923470

一、按key值排序
假设HashMap存储的键-值对为(String,Integer),按key排序可以调用JDK函数sort(默认的按字典升序):

[java]  view plain copy
  1. Set<String> keySet = map.keySet();  
  2. Collections.sort(keySet);  
  3. for(Iterator<String> ite = keySet.iterator(); ite.hasNext();) {  
  4.     String temp = ite.next();  
  5.     System.out.println("key-value: "+temp+","+map.getValue(temp);  
  6. }  
  7. 如果想要按字典的降序排列,则需改写sort方法里面的比较器Comparator:  
  8. Collections.sort(keySet, new Comparator() {  
  9.     public int compare(Object o1, Object o2) {  
  10.        if(Integer.parseInt(o1.toString())>Integer.parseInt(o2.toString())  
  11.             return 1;  
  12.        if(Integer.parseInt(o1.toString())==Integer.parseInt(o2.toString())  
  13.            return 0;  
  14.         else  
  15.             return -1;  
  16.     }  
  17. });  


二、按value值排序
1)方法一:用两个list链表实现

[java]  view plain copy
  1. List<String> keyList = new LinkedList<String>();  
  2. keyList.addAll(map.keySet());  
  3. List<Integer> valueList = new LinkedList<Integer>();  
  4. valueList.addAll(map.values());  
  5. for(int i=0; i<valueList.size(); i++)  
  6.    for(int j=i+1; j<valueList.size(); j++) {  
  7.       if(valueList.get(j)>valueList.get(i)) {  
  8.           valueList.set(j, valueList.get(i));  
  9.           valueList.set(i, valueList.get(j));  
  10.           //同样调整对应的key值  
  11.           keyList.set(j, keyList.get(i));  
  12.           keyList.set(i, kyeList.get(j));  
  13.       }  


然后依次把key值和对应value值重新装入HashMap即可。
2)方法二:改写JDK提供的Comparator接口方法compare

[java]  view plain copy
  1. List<Map.Entry<String, Integer>> list = new LinkedList<Map.Entry<String, Integer>>();  
  2. list.addAll(map.entrySet());  
  3. Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() {  
  4.    public int compare(Map.Entry obj1, Map.Entry obj2) {//从高往低排序  
  5.          
  6.        if(Integer.parseInt(obj1.getValue().toString())<Integer.parseInt(obj2.getValue().toString()))  
  7.            return 1;  
  8.        if(Integer.parseInt(obj1.getValue().toString())==Integer.parseInt(obj2.getValue().toString()))  
  9.            return 0;  
  10.        else  
  11.           return -1;  
  12.    }  
  13. });  
  14. for(Iterator<Map.Entry<String, Integer>> ite = list.iterator(); ite.hasNext();) {  
  15.      Map.Entry<String, Integer> map = ite.next();  
  16.     System.out.println("key-value: " + map.getKey() + "," + map.getValue());  
  17. }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值