黑马程序员技术交流社区

标题: 急急急!比较器和TreeMap的问题 [打印本页]

作者: 李晓俊老师    时间: 2012-2-27 21:55
标题: 急急急!比较器和TreeMap的问题
本帖最后由 李晓俊 于 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}

作者: 杨盼    时间: 2012-2-27 22:59
本帖最后由 杨盼 于 2012-2-27 23:04 编辑

打印错误,map是原始的
作者: H07000223    时间: 2012-2-27 23:00
本帖最后由 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;
        }
}
作者: 刘基军    时间: 2012-2-27 23:07
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所指向的集合对象已经按照你的要求进行了排序!
}
}
作者: 李晓俊老师    时间: 2012-2-27 23:20
汗啊,谢谢各位了
作者: 熊玖帅    时间: 2012-2-28 00:43
{:soso__8961432591078930798_3:}把14行:System.out.println(map); 改成:System.out.println(ts);   写程序看来真是马虎不得哈 有时候容易出问题的不是知识难点,反而是最简单最容易忽视的地方




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2