A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 苏志伟 黑马帝   /  2011-10-14 19:22  /  1983 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

题目:将一个字符串“abdfafdsafa”的各个字符出现的次数排序,如果字符出现次数相同,那么在按照字典顺序排序!
  1. import java.util.Comparator;
  2. import java.util.Map;
  3. import java.util.TreeMap;

  4. public class StringManager {
  5.         /**
  6.          * @param args
  7.          */
  8.         public static void main(String[] args) {
  9.                 // TODO Auto-generated method stub
  10.                 //我的解题思路有点麻烦呢!呵呵,分两步,
  11.                 //先code和值的entry装进一个map集合,然后再给他进行排序。
  12.                 //原因:有了值才可以进行排序啊!呵呵
  13.                 TreeMap<Character, Integer> codeEntry=new TreeMap<Character,Integer>();
  14.                 String srcString="abadcdffbaeba";//抱歉没有粉状成方法,在这里是字符串!
  15.                 for(int i=0;i<srcString.length();i++){
  16.                         if(codeEntry.containsKey(srcString.charAt(i))){
  17.                                 int entryvalue=codeEntry.get(srcString.charAt(i))+1;
  18.                                 codeEntry.put(srcString.charAt(i), entryvalue);
  19.                         }
  20.                         else{
  21.                                 codeEntry.put(srcString.charAt(i), 1);
  22.                         }
  23.                 }
  24.                 System.out.println(codeEntry);//第一步就做好了!
  25.                 Map<Character, Integer> valueMap=mapSort(codeEntry);//调用方法!
  26.                 System.out.println(valueMap);//打印Map;
  27.                 //接下来进行第二步!将entry在装进一个集合,那么在装得时候就得给他一个比较器,进行比较了!
  28.         }
  29.         public static Map<Character, Integer> mapSort(final Map<Character,Integer> srcMap){
  30.                 //此处注意,应为我们使用了匿名内部类,创建了一个比较器,所以形参必须是final类型的。
  31.                 //我们知道在treeMap进行比较的时候,是用的键来进行排序的。但是现在我们要用值进行排序,所以只能将srcmap传进来,获取相应的值来进行排序。
  32.                 TreeMap<Character,Integer> sortUtil = new TreeMap<Character,Integer>(new Comparator<Character>(){
  33.                         public int compare(Character o1, Character o2) {
  34.                                 // TODO Auto-generated method stub
  35.                                 int result=srcMap.get(o1)-srcMap.get(o2);
  36.                                 return result==(int)0?o1.compareTo(o2):result;//为防止数值大小一样,在对键值进行排序。
  37.                         }
  38.                 });
  39.                 //下一步,将srcmap中的值全都传入sortutil ,然后将这个数组返回。
  40.                 sortUtil.putAll(srcMap);
  41.                 return sortUtil;
  42.         }
  43. }
复制代码

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马