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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Echo0912 中级黑马   /  2015-9-13 22:23  /  495 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Set体系:
        特点:无序(存取的顺序不一致),唯一。
        //  a  b  c  d  e f g
        public boolean add(Object obj);   //往set集合中添加重复元素的时候,返回值是false。

        遍历:
                1、迭代器。
                2、增强for。


        HashSet:
                案例:存储字符串并遍历
                          存储自定义对象并遍历。

                HashSet是如何保证元素唯一性的?
                        依赖于两个方法:hashCode(),equals()。

                        set.add(new Person("张三",23));  

                        原理:
                                A:调用要添加的对象的hashCode()方法,计算出该对象的哈希值。
                                B:去集合中找是否有元素的哈希值和要添加的元素的哈希值相同。
                                        如果不同:直接把该元素存到集合中。
                                        如果相同:调用equals()方法去比较各个属性的值。
                                                如果都相同,不添加,否则,就把该元素添加到集合中。


                        问题1:hashCode()方法没有重写,equals()没有执行。    ???

        LinkedHashSet:
                有序,唯一。








注意:一个类可以有多个对象,但是一个类的字节码文件对象只有一个。
        Person p = new Person();
        Class c1 =         p.getClass();


        Class c2 =         p2.getClass();
        .

中午作业:
        1、编写一个程序,获取10个1至20的随机数,要求随机数不能重复。并把最终的随机数输出到控制台(for)
        2、使用Scanner从键盘读取一行输入,去掉其中重复字符, 打印出不同的那些字符
        3、ArrayList集合存储元素,去重复。
       
                ArrayList<String>  list = new ArrayList<>();
                list.add("a");
                list.add("a");
                list.add("b");
                list.add("b");
                list.add("b");
                list.add("c");
                list.add("c");
                list.add("d");
                list.add("e");

        4、HashSet存储自定义对象,然后保证元素唯一性。



        TreeSet:
                对元素进行排序的。
               
                自然排序:
                        让基本类(要排序的类)去实现Comparable接口,并且重写接口中的compareTo()方法。
                        注意:
                                当compareTo()方法返回0的时候,集合中只有一个元素。
                                当compareTo()方法返回正数的时候,怎么存就怎么取。
                                当compareTo()方法返回负数的时候,倒序存储。

                        二叉树取元素的顺序是什么:左,中,右。

                        注意:
                                用TreeSet排序的时候,一定要考虑清楚什么是主要条件,什么是次要条件。

                                思考:
                                        按照姓名排序。(采用的是Unicode编码表中的值)
                                                //this.name.compareTo(s.name);

                                        如果是按照 姓名的长度 排序呢?
                                                //this.name.length() - s.name.length();
                                                //内容,年龄

                比较器排序:
                        使用的是 TreeSet(Comparator comparator);  TreeSet类的带参构造。
                        做法:
                                1、新建一个类,去实现Comparator接口,重写接口中的compare(),然后创建一个该类对象,传入到 TreeSet类的带参构造中。
                                2、直接使用匿名内部类。 (推荐)

        TreeSet的原理:

        思考: 在一个集合中存储了无序并且重复的字符串,定义一个方法,让其有序(字典顺序),而且还不能去除重复 (1分钟)
                        TreeSet<String> ts = new TreeSet<>( new Comparator<String>(){
                                public int compare(String s1, String s2){
                               
                                }
                       
                        } );

0 个回复

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