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:判断集合是否变化,变化了返回并发修改异常错误


解决方法:



















![【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 火星字符串(100分) - 三语言AC题解(Python/Java/Cpp)](https://img-blog.csdnimg.cn/direct/db21a5ca2ee342ddb9f4aecf02b9036f.png)
