集合和并发修改异常

字节逸梦
• 阅读 161

集合
        就是一个容器。
        就是用来装东西的。

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

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();//指向谁,就删除谁。

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java基础
JAVA集合在处理数据的过程中经常会需要一个容器来存储某一类型的数据,Java中的数组就是这样一种容器。但Java中的数组有其局限性,定义后的数组长度不可变,超出数组长度后就不能再存放数据了。而很多时候我们并不知道数据到底有多少,所以就需要有不定长的容器来存放数据,这就是集合,Java中的集合都采用了泛型实现,可以存入任何类型的对象数据
Stella981 Stella981
3年前
Python中的list详解
Python中内置的一种数据类型list,列表。list是一个有序集合,所谓有序集合就是可以通过Key或者Index进行访问(无序集合,集合的元素只能遍历,比如set)。list能随时随地进行增加和删除。python中list用\\进行表示。例如:\\\friends\'fanbinbin','libinbin','xijin
Wesley13 Wesley13
3年前
Java 集合框架看这一篇就够了
话不多说,直接上图:!(https://oscimg.oschina.net/oscnet/f3c0ddc12b41af1fcc1844190fa22eb8bcc.png)Java集合,也称作容器,主要是由两大接口(Interface)派生出来的:Collection和Map顾名思义,容器就是用来存放数据的。
Wesley13 Wesley13
3年前
Java最常见的面试题:模块二
容器18\.java容器都有哪些?常用容器的图录:19\.Collection和Collections有什么区别?java.util.Collection是一个集合接口(集合类的一个顶级接口)。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java类库
Wesley13 Wesley13
3年前
Java核心(四)你不知道的数据集合
!数据容器关系图(http://icdn.apigo.cn/blog/collection002.png)导读:Map竟然不属于Java集合框架的子集?队列也和List一样属于集合的三大子集之一?更有队列的正确使用姿势,一起来看吧!Java中的集合通常指的是Collection下的三个集合框架List、Set、Queue和Map集合,Map并不
Wesley13 Wesley13
3年前
MongoDB基础
MongoDB与关系型数据库的对比:!(https://oscimg.oschina.net/oscnet/545b6624046cd348c3b292bc4b161d0a272.png) 1.创建数据库: 2.创建集合3.集合的增、删、改、查1)在集合(表名)中插入一个文档(一行数据):db.集合名称.insert({name
可莉 可莉
3年前
21.30 mongodb创建集合、数据管理
21.30mongodb创建集合、数据管理MongoDB创建集合:db.createCollection("mycol",{capped:true,size:6142800,max:10000})//语法:db.createCollection(name,options)name就是集合
Wesley13 Wesley13
3年前
Java集合框架一览笔录
1、集合概念集合类主要负责保存、盛装其他数据,因此集合类也被称为容器类。所以的集合类都位于java.util包下,后来为了处理多线程环境下的并发安全问题,java5还在java.util.concurrent包下提供了一些多线程支持的集合类。集合分为两大类:Collection、Map。Collection(集合),每个元素存储单个
Wesley13 Wesley13
3年前
.Net转Java自学之路—基础巩固篇十三(集合)
集合:集合是用于存储对象的一个工具。  集合与数组的特点    相同点:都是一个容器    不同点:      集合:可以存储对象,只能存储对象,集合长度可变。      数组:可以存储对象,也可以存储基本数据类型,数组长度固定。  容器对象有很多种,通过内部的数据结构来区分,数据结构就是一种数据存储方式。  在不断
Wesley13 Wesley13
3年前
Java面试常问集合框架22道面试真题(详解)
简介集合框架:用于存储数据的容器。集合框架是为表示和操作集合而规定的一种统一的标准的体系结构。任何集合框架都包含三大块内容:对外的接口、接口的实现和对集合运算的算法。接口:表示集合的抽象数据类型。接口允许我们操作集合时不必关注具体实现,从而达到“多态”。在面向对象编程语言中,接口通常用来形成规范。
Wesley13 Wesley13
3年前
Java集合笔记
1.1集合概述在前面基础班我们已经学习过并使用过集合ArrayList<E,那么集合到底是什么呢?集合:集合是java中提供的一种容器,可以用来存储多个数据。集合和数组既然都是容器,它们有啥区别呢?数组的长度是固定的。集合的长度是可变的。数组中存储的是同一类型的元素,可以存储基本数据类