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()方法
总体流程:
什么是并发修改异常?
- 异常产生原因:并发修改异常指的是在并发环境下,当方法检测到对象的并发修改,但不允许这种修改时,抛出该异常。