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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

集合体系之TreeSet
         |---Collection
                 |---List
                         特点: 有序,有角标,元素可重复
                         |---ArrayList
                         |---LinkedList
                 |---Set
                         特点: 无序,元素不可重复.
                         |---HashSet
                                 |---LinkedHashSet
                         |---TreeSet
         1.特点:
                 该集合最显著的特点,可以给元素按照自然顺序排序...
         问题:
                 存储自定义元素时, 如果元素没有定义比较的规则. 该集合是无法存储的.
        解决方案一:
                元素->实现接口Comparable 重写compareTo.
                compareTo方法重写的技巧.
                        在返回整数值.
                       
                public int compareTo(Object o){
                        this
                        o;
                }
                当你,想要this >o 对象时. 该方法就返回正整数.
                当你,需要 this<o 对象时,方法返回负整数.
                当你,需压迫this ==o 对象时. 方法返回0.
        注意:  
                如果使用集合TreeSet 存储了自定义元素. 而这种元素,却没有实现Comparable接口,也没有重写compareTo 方法. 此时TreeSet就无法正常工作. 运行直接报错了.
                1. 可以想解决方案一一样,让元素去实现Comparable接口
                        如果使用集合存储的元素. 不是自行设计的,使用其他公司,机构,(第三方开发的). 无法直接修改这个源码,直接只能使用而已...
                1. 定义子类继承这个类,在子类中实现接口Comparable 接口. ->万一这个类设计为final类.
                当遇到各种各样的问题,导致了元素无法实现Comparable 接口时, 不要在元素浪费时间. 可以直接给TreeSet 指定比较器对象. 告诉集合该如何给元素排序.
        解决方案二:
                TreeSet的构造函数,接收一个Comparator 接口的实现类对象. ->给集合TreeSet 指定比较器.
               
                interface Comparator{
                       
                        public int compare(Object o1,Object o2){
                               
                        }
                }
        总结:
                都是为了保证集合TreeSet 可以正常工作的.
                接口一:
                        Comparable ->compareTo
                        -> 元素,元素实现这个接口,重写方法. 保证元素具备自然的比较性.   
                        构造函数:
                                TreeSet()        
                接口二:
                        Comparator ->compare
                        -> 集合,集合有了这个比较器,集合就知道如何排序了.
                       
                        构造函数:
                                TreeSet(Comparator comparator)
                                定义类实现该接口,创建给接口的实现类对象,通过TreeSet的构造函数,接收这个对象.
                                直接使用匿名内部类的形式,直接在TreeSet构造函数中,创建这个接收的实现类对象.

0 个回复

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