黑马程序员技术交流社区

标题: 集合大总结! [打印本页]

作者: 如初见    时间: 2015-7-1 22:28
标题: 集合大总结!
Collections:Collection的工具类
        sort()
        binarySearch()
        reverse()
        max()
        min()
        shuffle()
        案例:斗地主发牌游戏

Collection:单列集合的最顶层接口(两种遍历方式:迭代器 增强for循环)
        |--add(); remove();clear();isEmpty();size();contains()
        |--iterator()
               
                |--List:元素有序(存入和取出的顺序相同),可以重复,可以通过索引来操作元素(遍历方式:迭代器 列表迭代器 增强for循环 普通for循环)
                        |--add();remove();get();size();indexOf();set();
                        |--ListIterator
                                ConcurrentModificationException 并发修改异常
                                ①:原因:在通过迭代器遍历集合的时候 我通过集合来操作(增删改)了集合里面的元素
                                ②:解决办法:
                                        A:在迭代器遍历集合的时候,我们通过迭代器来操作元素
                                                ListIterator        列表迭代器
                                        B:for循环来遍历集合的时候,通过集合来操作元素

                                |--ArrayList:底层是数组结构:查询快增删慢 不安全 效率高
                                        案例:ArrayList去除重复元素
                                |--Vector:底层是数组结构:查询快 增删慢 安全 效率低
                                        学习了一些方法
                                |--LinkedList:底层是链表结构:查询慢 增删快 不安全 效率高
                                        addFirst() addLast() removeFirst() removeLast() getFirst() getLast()
                                        案例:用LinkedList模拟栈结构

                |--Set:元素无序(存入和取出的顺序不相同),唯一(两种遍历方式:迭代器 增强for循环)
                        |--HashSet
                                HashSet是如何保证元素唯一性的呢?
                                HashSet底层是用的哈希表结构
                                底层依赖两个方法hasCode() equals()
                                        首先判断hasCode()返回值是否相同
                                                相同:判断equals()
                                                        true:说明两个对象 相同  咱们就不添加
                                                        false:说明两个对象 不相同 咱们就添加
                                                不相同:添加
                                所以说咱们要让元素所在的类 重写hasCode()和equals()方法
                                如何重写呢?eclipse直接生成
                        |--TreeSet
                                TreeSet是如何保证元素唯一性的呢?(排序)
                                1:自然排序:让TreeSet存储的元素所在的对象实现Comparable接口
                                        通过compareTo()的返回值来保证元素的唯一(排序)
                                                正数:说明咱们要存入的这个元素比上一个元素大  往后放
                                                负数: 说明咱们要存入的这个元素比上一个元素小  往(钱)放
                                                                                                顺便排序
                                                0: 说明重复
                                                public int compareTo(Student s){
                                                        int num =this.age-s.age;
                                                        int num2 =(num==0)?this.name.compareTo(s.name):num;
                                                        return num2;w
                                                }
                                2: 通过比较器:Comparator 调用TreeSet的带参构造方法 传入一个比较器
                                        让TreeSet就按照咱们这个比较器的规则来去掉重复和排序
                                       
                                        如果以后我们看到方法上的参数是抽象类或者接口的时候 我们可以考虑用匿名内部类来实现

Map:双列集合的底层接口(两种:
                                1):先获取所有键的集合,遍历这个集合 然后通过键获取值
                                        先找到丈夫  然后让丈夫去找妻子
                                2):先获取所有键值对的的集合 然后遍历这个集合 拿到每个键值对 再根据键值对来找到键和值
                                        先获取结婚证 然后通过结婚证来找到丈夫和妻子
                                )
        |--V put(K key, V value):如果有这个Key我们就替换值 并把被替换的值返回 ,如果没有这个Key呢 就添加 返回null
                V remove(K key):根据Key来删除一个键值对  如果key没有 返回null
                Set<K> keySet():返回所以得键的集合
                Collection<V> values():返回所有值得集合
               
               
                |--HashMap
                        底层是哈希表结构 ,这种结构是针对键有效的
                        如果要是键是自定义对象的话,我们一般重写hashCode()和equals()
                |--TreeMap
                        底层是二叉树结构,这种结构是针对键有效
                        如果要是键是自定义对象的话,我们一般让他实现Comparable接口 重写compareTo方法
作者: Huan220_欢    时间: 2015-7-1 23:02
总结的很好,赞一个!
作者: GiveUp    时间: 2015-7-1 23:27
学习了。很好,不错
作者: 成佳裕    时间: 2015-7-2 00:07
还没学到集合。。。。。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2