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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李晓俊老师 黑马帝   /  2012-2-27 21:55  /  2486 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李晓俊 于 2012-2-27 21:58 编辑
  1. public static void main(String[] args)
  2. {
  3.                 method3("deabbccfff");
  4.                
  5. }
  6. public static void method3(String s)
  7. {
  8.                 Map<Character, Integer> map = new TreeMap<Character, Integer>();       
  9.                
  10.                 for(char c : s.toCharArray())                                                                               
  11.                         map.put(c, map.containsKey(c) ? map.get(c) + 1 : 1);       
  12.                 TreeSet<Entry<Character, Integer>> ts = new TreeSet<Entry<Character, Integer>>(new EntryComp());
  13.                 ts.addAll(map.entrySet());
  14.                 System.out.println(map);
  15. }下面是我的比较器
  16. class EntryComp implements Comparator<Entry<Character, Integer>>
  17. {
  18.         public int compare(Entry<Character, Integer> en1,Entry<Character, Integer> en2)
  19.         {
  20.                 int num = en1.getValue()-en2.getValue();
  21.                 return num==0 ? en1.getKey().compareTo(en2.getKey()) : num;
  22.         }
  23. }
复制代码
需求是按照次数顺序排序, 次数相同的按照字母顺序: {a=1, d=1, e=1, b=2, c=2, f=3},,,怎么打印不出效果,,
打印结果为{a=1, b=2, c=2, d=1, e=1, f=3}

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

5 个回复

倒序浏览
本帖最后由 杨盼 于 2012-2-27 23:04 编辑

打印错误,map是原始的
回复 使用道具 举报
本帖最后由 H07000223 于 2012-2-27 23:01 编辑

找了老半天错误,暮然回首~~~
public static void main(String[] args)
{
                method3("deabbccfff");
               
}
public static void method3(String s)
{
                Map<Character, Integer> map = new TreeMap<Character, Integer>();        
               
                for(char c : s.toCharArray())                                                                                
                        map.put(c, map.containsKey(c) ? map.get(c) + 1 : 1);        
                TreeSet<Entry<Character, Integer>> ts = new TreeSet<Entry<Character, Integer>>(new EntryComp());
                ts.addAll(map.entrySet());
//                   System.out.println(map);大哥你打印目标错误了,蛋疼啊
             System.out.println(ts);//应该打印这玩意儿
}
下面是我的比较器
class EntryComp implements Comparator<Entry<Character, Integer>>
{
        public int compare(Entry<Character, Integer> en1,Entry<Character, Integer> en2)
        {
                int num = en1.getValue()-en2.getValue();
                return num==0 ? en1.getKey().compareTo(en2.getKey()) : num;
        }
}

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
public static void method3(String s)
{
                Map<Character, Integer> map = new TreeMap<Character, Integer>();        
               
                for(char c : s.toCharArray())                                                                                
                        map.put(c, map.containsKey(c) ? map.get(c) + 1 : 1);        
                TreeSet<Entry<Character, Integer>> ts = new TreeSet<Entry<Character, Integer>>(new EntryComp());
                ts.addAll(map.entrySet());
                System.out.println(map); //
                System.out.println(ts); //应该打印引用ts的内容,而不是map的。实际上:ts所指向的集合对象已经按照你的要求进行了排序!
}
}

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
汗啊,谢谢各位了
回复 使用道具 举报
{:soso__8961432591078930798_3:}把14行:System.out.println(map); 改成:System.out.println(ts);   写程序看来真是马虎不得哈 有时候容易出问题的不是知识难点,反而是最简单最容易忽视的地方
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马