黑马程序员技术交流社区

标题: 【南京校区】集合和并发修改异常 [打印本页]

作者: 大蓝鲸Java    时间: 2019-7-19 12:03
标题: 【南京校区】集合和并发修改异常
集合
        就是一个容器。
        就是用来装东西的。

        针对于类似的容器的知识点:增 删 改 查




1.集合体系:
                单列集合:一次只能存一个数据
                        List
                                有序:存取顺序。
                                有索引:可以通过索引获取对应的元素
                                可以重复:存了一个"abc" 那么还可以再存一个"abc"

                        Set
                                无序: 存取顺序不一致
                                无索引:不可以通过索引获取对应的元素
                                不可以重复:存了一个"abc" 那么不可以再存一个相同"abc"
                       

                双列集合:一次只能存两个数据

2.单列中的常用方法
         boolean add(E e)                    向集合中添加元素
     boolean remove(E e)              将元素从集合中删除
                                                                                                //直接删除集合中的一个对象,是Collection中的方法
                                                                                                //通过索引删除Collection中是没有的。
                                                                                                                        //因为Set集合是没有索引的。

         void clear()                              清空集合所有的元素

     boolean contains(E e)             判断集合中是否包含指定的元素
     boolean isEmpty()                   判断集合是否为空
     int size()                                   获取集合的长度



3。Collection集合的遍历
        1.为什么会学习迭代器?
                因为以前的for循环遍历是依赖集合的长度和集合的索引。
                通过每一个索引来获取元素。

                但是现在单列集合中还有Set集合,Set集合是没有索引的。所以无法通过普通for循环遍历。


        依赖的三个方法:
                1,list.iterator();创建了一个迭代器的对象
                2,it.hasNext();判断是否有元素可以被迭代器
                3,it.next();获取当前指向的元素
                                    移动指针


        案例:
                ArrayList<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        list.add("e");

        Iterator<String> it = list.iterator();
        while(it.hasNext()){
            String next = it.next();
            System.out.println(next);
        }

        注意点:
                1、迭代器对象随用随创建
                2、hasNext方法跟next一定要配套使用
                3、指针移动完毕不会复位

4.List集合概述和特点

        特点:
                有序
                        //存取顺序
                                //怎么存的,怎么取出来。
                有索引

                可以重复

17,List的集合的特有方法
                void add(int index,E e)       向集合中指定索引位置添加元素
        E remove(int index)            删除指定索引处的元素并返回
        E set(int index,E e)              修改指定索引处的元素,返回被修改的元素
        E get(int index)                   获取指定索引处的元素

        都是跟索引有关的。


                遍历方式:
                        List下面所有的集合:
                                        迭代器
                                        普通for

                        Set下面所有的集合:
                                        迭代器


        疑惑:
                以后创建集合的对象到底怎么写?
                        明确:以后创建对象一律使用:ArrayList<String> list = new ArrayList<>();
                        当我们自己定义一个方法的时候,方法的参数可以使用多态形式。


5.并发修改异常
问:
        并发修改异常产生的原理?
                在使用迭代器遍历集合的过程中,使用了集合的方法对集合进行了添加或者修改。
                所以会导致并发修改异常。

        如何避免?
                利用迭代器自身的方法,进行添加和删除就可以了。
               
         it.remove();//指向谁,就删除谁。








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