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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吉许 黑马帝   /  2011-11-2 09:26  /  2609 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看毕老师的视频中看到TreeMap时想自定义一个比较器
class MyTMCom implements Comparator<TreeMap<Character, Integer>>{

        @Override
        public int compare(TreeMap<Character, Integer> o1,
                        TreeMap<Character, Integer> o2) {
                // TODO Auto-generated method stub
                int num=o1.get(Character).compareTo(o2.get(Character));
                return 0;
        }       
}
写到这时提示:Character字符不能被解析为一个变量.
看视频中毕老师自定义的比较器里边的compareTO比较的都是两个对象的直接调用方法.比如int num=o1.getname().compareTO(o2.getname());方法中不用传参数

java.util
类 TreeMap<K,V>
基于红黑树(Red-Black tree)的 NavigableMap 实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。
因为这个类根据键的自然顺序排序,我想自定义一个比较器,按值的自然顺序排序,

4 个回复

倒序浏览
上面没编写完点错键发出来了.
写到这时提示:Character字符不能被解析为一个变量.
看视频中毕老师自定义的比较器里边的compareTO比较的都是两个对象的直接调用方法.比如int num=o1.getname().compareTO(o2.getname());方法中不用传参数
而这个比较器中对象是TreeMap,对象里边的get方法也要传递参数才能返回值.查了一个晚上,API中的TreeMap方法查遍了也没找到合适的方法,到这里时不知道怎么下手了,不知道这样能不能实现.特来求助大家的力量.

或者能写一个比较器接值的自然顺序排序也可以,兄弟们能提供个解决思路吗?大家讨论下!
回复 使用道具 举报
...你要比较什么?  例如 按照什么比较哦  没看清楚
回复 使用道具 举报
来说一下我自己定义的比较TreeMap<key,value>中value的方法

在定义TreeMap的类中自定义一个内部类,封装key value值 实现comparator
覆盖compareTo方法   就像姓名-----年龄  一样封装

class Demo{

public  void treemapdemo( ){
               
                TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>();

                                .............
                                //遍历集合将遍历的key value 封装对象加入到TreeSet集合中
                                Set<ToSort> sort = new TreeSet<ToSort>();

                StringBuilder sb = new StringBuilder();
               
                Set<Map.Entry<Character,Integer>> entrySet = tm.entrySet();
                Iterator<Map.Entry<Character,Integer>> it = entrySet.iterator();
               
                while(it.hasNext()){
                        Map.Entry<Character,Integer> me = it.next();
                        Character ch = me.getKey();
                        Integer value = me.getValue();
                        sort.add(new ToSort(ch,value));//使用内部类
                }
               
                for (ToSort s: sort)
                {
                        sb.append(s);
                }
               
                String str1 = sb.toString();
               
            str = (String)str1.subSequence(0, str1.length()-2);
            
            System.out.println("排序后:"+str);
            
        }


private class ToSort implements Comparable<ToSort>{

                    private Character key;
                    private Integer value;
             

                    ToSort(Character key,Integer value)
                    {
                            this.key = key;
                            this.value = value;
                             
                    }
                   
                    public Character getKey() {
                            return key;
                    }

                    public Integer getValue() {
                            return value;
                    }

                   
                   
                    public int compareTo(ToSort s)
                    {
                            int num = new Integer(this.value).compareTo(new Integer(s.value));

                            if (num==0)
                                   return this.key.compareTo(s.key);
                            return num;
                    }
                   
                    public String toString()
                    {
                            return key+" : "+value+", ";
                    }

            }
}




回复 使用道具 举报
Set<ToSort> sort = new TreeSet<ToSort>(new ToSort());
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马