List实现类——ArrayList、LinkedList及迭代器(并发修改异常错误)源码分析

1、ArrayList本质及源码分析

两种情况:加一个和很多个

底层原理:elementData是底层数组的名字

再次满了的话,在扩容1.5倍

如果利用addAll一次添加多个元素,按实际元素数进行扩容

源码分析:

1、空参构造,添加第个元素"aaa"时 : 第一次扩容

2、空参构造,添加第十一个元素"aaa"时(超出默认初始容量): 第二次扩容

2、LinkedList本质及源码分析

底层原理:双向链表,每个节点存储:上一个结点地址+数据+下一个结点地址

独有api:方便查询(用的少,一般用Collection里面的)

源码分析:

1、LinkedList的内部类——Node(结点的对象):三个成员变量:上一个结点地址+数据+下一个结点地址

2、LinkedList空参构造:空参时已经加载了三个初始化的成员变量

3、LinkedList的Add源码
第一次添加"aaa"时:

添加"bbb":

以此类推,Add "ccc"

wen

文字表达:

(1)、第一次add元素时,首先给尾结点last地址(null)并利用该结点当做是创建新结点的prev值,创建结束后,将新结点的地址值再次赋给last,更新尾结点的地址,以便后面添加新元素,起连接作用,这样以后创建的其他结点的prev值都是上次创建结点的地址值。

(2)、后面add结点时,last已经不为null,但此时l对应的还是上次创建的结点的地址值,所以令l的next值为新结点的地址值,这样保证以后创建的结点的上一结点的next值都是本次创建结点的地址值。

源代码:新结点的pre值为原结点的地址值(1),使得原结点的next值为新结点地址值(2)

3、迭代器源码分析:本质是ArrayList的一个内部类

内部类Itr,hashNext()方法

总体流程:

什么是并发修改异常?

  • 异常产生原因:并发修改异常指的是在并发环境下,当方法检测到对象的并发修改,但不允许这种修改时,抛出该异常。

modCount参数:集合变化的次数,add/remove后都会自增,创建迭代器时,将这个次数告诉迭代器(所以为什么迭代器中不允许有集合的操作原因如这条)

checkForComadification:判断集合是否变化,变化了返回并发修改异常错误

解决方法:

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值