对HashMap中的实体类进行排序

转自:http://www.cdtarena.com/javapx/201305/8568.html

[java] view plaincopyprint?

 

  1. package demo20130414;  


  2. import java.util.Collection;  

  3. import java.util.Collections;  

  4. import java.util.Comparator;  

  5. import java.util.HashMap;  

  6. import java.util.Iterator;  

  7. import java.util.Map;  

  8. import java.util.Map.Entry;  

  9. import java.util.Set;  

  10. import java.util.ArrayList;  

  11. import java.util.List;  

  12. publicclass CharCounterDemo {  

  13. /**

  14.      */

  15. publicstaticvoid main(String[] args) {  

  16.         String str = "aabbccdderffisfalgjgosdrugnsdsduhgdsfugsdogosdjgosdig";  

  17.         Map<Character, Integer> map = countAll(str);  

  18.         System.out.println(map);  

  19. // 迭代Map: 迭代所有的key,迭代所有的value迭代Entry<key,value> 

  20. // 迭代所有的value,实现统计所有的字符总数 

  21.         Collection<Integer> values = map.values();  

  22.         Iterator<Integer> ite = values.iterator();  

  23. int total = 0;  

  24. while (ite.hasNext()) {  

  25.             Integer n = ite.next();  

  26.             total += n;  

  27.             System.out.print(n + " ");  

  28.         }  

  29.         System.out.println("字符总数:" + total);  

  30. // 迭代所有的key,利用迭代所有字符实现输出统计表格 

  31.         Set<Character> keys = map.keySet();  

  32.         System.out.println("字符串中所有字符的个数:" + keys.size());  

  33.         ArrayList<Character> list = new ArrayList<Character>(keys);  

  34.         Collections.sort(list);// 自然排序 

  35. for (Iterator<Character> i = list.iterator(); i.hasNext();) {  

  36.             Character ch = i.next();  

  37. int n = map.get(ch);  

  38.             System.out.print(ch + ":");  

  39.             System.out.println(n + " " + ((float) n / total) * 100 + "%");  

  40. // System.out.print(ch); 

  41.         }  

  42.         System.out.println("照字符出现的数量排序输出:");  

  43. //迭代Entry<key:Value> 实现按照字符出现的数量排序输出 

  44.         Set<Entry<Character, Integer>> entries = map.entrySet();  

  45.         List<Entry<Character,Integer>> entList=new ArrayList<Entry<Character,Integer>>(entries);  

  46.         Collections.sort(entList, new ByValue());  

  47. for (Iterator<Entry<Character, Integer>> i = entList.iterator(); i.hasNext();) {  

  48.                 Entry<Character,Integer> entry=i.next();  

  49.                 Character ch=entry.getKey();  

  50.                 Integer n=entry.getValue();  

  51.                 System.out.print(ch + ":");  

  52.                 System.out.println(n + " " + ((float) n / total) * 100 + "%");  

  53.         }  

  54.     }  


  55. privatestatic Map<Character, Integer> countAll(String str) {  

  56. int length = str.length();  

  57.         Map<Character, Integer> map = new HashMap<Character, Integer>();  

  58. for (int i = 0; i < length; i++) {  

  59. char ch = str.charAt(i);  

  60. if (map.containsKey(ch)) {// 如果包含ch 

  61. int n = map.get(ch);  

  62.                 map.put(ch, n + 1);  

  63.             } else {// 如果不包含ch 

  64.                 map.put(ch, 1);  

  65.             }  

  66.         }  

  67. return map;  

  68.     }  

  69. }  

  70. class ByValue implements Comparator<Entry<Character,Integer>>{  

  71. publicint compare(Entry<Character, Integer> o1,  

  72.             Entry<Character, Integer> o2) {  

  73. // TODO Auto-generated method stub 

  74. return -(o1.getValue()-o2.getValue());//从大到小排列 

  75. //return (o1.getValue()-o2.getValue());//从小到大排列 

  76.     }  

  77. }  


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值