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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Frank2008 中级黑马   /  2015-7-21 00:35  /  322 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

TreeSet
        (1)TreeSet:根据构造方法的不用,选择使用自然排序或者比较器排序。
                    按照实际的需求,可以对元素进行排序。并且保证唯一。
        (2)怎么保证的呢?
                排序:底层结构是二叉树。按照树节点进行存储和取出。
                        两种实现:
                                A:自然排序(元素具备比较性)

                                        TreeSet的无参构造,要求对象所属的类实现Comparable接口。
                                        public int compareTo( Studetn s )
                                        {
                                                //需求是比较年龄
                                                int num = this.age - s.age ;
                                                //由于对象有多个成员变量,你不能根据其中的某一个决定其他的。
                                                //当某一个形同的时候,你还需要判断其他的是不是也是相同的。
                                                int num2 = ( num == 0 ) ? ( this.name.compareTo( s.name ) ) : num ;
                                                return num2;
                                        }

                                B:比较器排序(集合具备比较性)

                                        TreeSet的带参构造,要求构造方法接收一个实现了Comparator接口的对象。

                                        TreeSet<Student> ts = new TreeSet<Student> ( new Comparator<Student>
                                        {
                                                @Override
                                                public int compare ( Student s1 , Student s2)
                                                {
                                                        //按照年龄排序,从小到大
                                                        int num = s1.getAge() - s2.getAge();
                                                        //次要条件
                                                        int num2 = ( num == 0 ) ? ( s1.getName().compareTo(s2.getName()) ) : num;
                                                        return num2;
                                                }
                                        } );

                                        //创建元素对象
                                        Student s1 = new Student(“张三”,24);
                                        Student s2 = new Student(“李四”,30);
                                        Student s1 = new 。。。。。。
                                        //添加元素
                                        ts.add(s1);
                                        ts.add(s2);
                                        ...........
                                        for( Student s : ts )
                                        {
                                                System.out.println(s.getName() + "*****" + s.getAge());
                                        }


                唯一:根据返回值是否为0。
               
                注意:
                        如果同时有两种方案,以谁为主呢?以比较器为主。

0 个回复

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