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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 499827204 初级黑马   /  2016-4-19 10:57  /  408 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Set
        HashSet
                方法:与List集合中方法一样。
                元素唯一:
                        在添加元素时,会对集合中已有的元素和你要添加的元素做比较,
                        如果集合中有相同的元素,就不添加,返回false。
                判断依据:
                        在存储自定义对象是,他会根据自定义对象中的hashCode()方法和equals()方法进行判断,
                        两个对象是否是相同的元素。

                添加一个元素,
                        先会判断添加的元素和集合中所有元素,hashCode 是否相等,
                        如果相等在来调用equals方法进行比较,如果结果为true不添加,结果为false添加这个元素
                        如果hashCode不相等,直接添加元素
               
                注意:
                        如果想让集合中存储自定义对象去重,那么必须在自定义对象的这个类中重写hashCode和equals方法。
                        (开发时自动生成即可)
                保证元素唯一:
                        重写hashCode和equals方法
               
                LinkedHashSet 他是HashSet的子类
                        特点:保证元素唯一,存储有序。

        TreeSet
                       
                自然排序接口 Comparable  重写方法 compareTo        ,使用:存储的元素需要实现这个接口
                        TreeSet<Person> ts = new TreeSet<>();
                        如果这个集合存储的是Person对象,那就需要在Person这个类中实现Comparable接口,并重写compareTo方法
                        eg:
                        public class Person implements Comparable<Person>{
                                //此处省略 属性,构造方法,get、set方法等
                                @Override
                                public int compareTo(Person o) {                //this在前是正序,如:123 abc
                                        int num = this.age - o.age;
                                        return num == 0 ? this.name.compareTo(o.name) : num;
                        }

                比较器接口 Comparator  重写方法  compare  ,使用:创建集合对象,作为参数传进去
                        使用比较器时,这个Person类中可以不实现Comparable接口,但是在创建集合的时候需要传参数
                        参数就是Comparator的子类对象
                        eg:
                        TreeSet<Person> ts2 = new TreeSet<Person>(new Comparator<Person>() {
                                @Override
                                public int compare(Person p1, Person p2) {//p1在前是正序,如:123 abc
                                        int num = p2.getAge() - p1.getAge();
                                        return num == 0 ? p1.compareTo(p2) : num;
                                }
                        });

        *是否可以同时使用自然排序和比较器 ? 可以,优先使用比较器。

                List 和 Set :
          1.List
                  a.普通for循环, 使用get()逐个获取
                  b.调用iterator()方法得到Iterator, 使用hasNext()和next()方法
                  c.增强for循环, 只要可以使用Iterator的类都可以用
                  d.Vector集合可以使用Enumeration的hasMoreElements()和nextElement()方法
          2.Set
                  a.调用iterator()方法得到Iterator, 使用hasNext()和next()方法
                  b.增强for循环, 只要可以使用Iterator的类都可以用

0 个回复

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