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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴豪 中级黑马   /  2015-8-15 23:31  /  392 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1. 回顾
        栈:
                后进先出 LIFO表
        队列:
                先进先出 FIFO表
        数组:
                查询快,增删慢
        链表:
                查询慢,增删快
       
        哈希表:
        树
       
        List
                -- ArrayList
                        数组,查询快,增删慢
                        线程不安全,效率高
                -- Vector
                        数组,查询快,增删慢
                        线程安全,效率低
                       
                        addElement(Object obj) -- add(Object obj)
                       
                -- LinkedList
                        链表,查询慢,增删快
                        线程不安全,效率高
                       
                        addFirst(Object obj)
                        addLast(Obejct obj)
                       
                        了解面试题:用LinkedList模拟栈结构。面向对象。
                       
        根据具体需求选择使用哪一个。如果不知道,请使用ArrayList。
       
       
        增强for
                for(String str : list)
                {
                        sysout(str);
                }
               
        泛型:明确数据类型的工作放到创建对象或者调用方法的时候。
                泛型类
                泛型接口
                泛型方法
               
        备份的思想!!!
       
2. Set体系
        特点:元素唯一,无序
       
        HashSet
       
        TreeSet
       
3. HashSet的add源码:
        HashSet 封装的是HashMap实现的, 走add方法 ,其实是走的HashMap的put方法;
       
        put方法里面,先做了是否为null的判断之后,就去算了一个hash值。这个值跟对象的hashCode() 方法相关。
       
        然后看下面这句代码:
        if (e.hash == hash && (e.key == key||key.equals(k))) { }
         
        看上面的判断代码,如果hash值不一样,就直接返回了fasle,认为元素不重复,添加到集合去了。
       
        只有hash值不一样,再去比较对象的地址值(为了效率), 再去走equals方法,它也返回true。这时才能说明元素重复了。
       
        所以结论:
        HashSet集合存储自定义对象保证元素唯一依赖于对象所属类的两个方法:
                hashCode()
                equals()
       
       
4. TreeSet
        特点:保证元素唯一,也不保证元素存储和取出的顺序。但是它可以按元素的自然顺序排序。
       
        使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序,具体取决于使用的构造方法。
       
        TreeSet存储自定义对象,保证元素唯一且实现排序:
                方式1(让元素具备比较性):
                        自然排序:
                        让元素所属类实现Comparable接口,重写compareTo() 方法。根据方法的返回值:
                        如果是正数: 元素往后放
                        如果是负数: 元素往前方
                        如果是0: 元素重复,不添加
               
                方式2:(让集合具备比较性)
                        使用TreeSet的带参构造。
                       
                        自定义类实现Comparator接口, 重写compare()方法。
                        创建此实现类的对象,使用TreeSet(Comparator comparator)构造,将对象作为参数传递进去
       
                        匿名内部类:
                                格式:
                                        new 接口名(){
                                                // 重写接口中的方法
                                        };
                                本质: 实现了接口的匿名子类对象。
       
5. Collections 工具类
        sort(List list)
        int binarySearch(List list, T key)
        reverse(List list)
       
        max(Collection c)
        min(Collection c)
       
        shuffle(List list)
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       
       

1 个回复

倒序浏览
谢谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马