Arraylist源码解析(二)

本文深入解析ArrayList的特点及其实现原理,探讨其线程安全性、元素插入、删除的效率问题,以及扩容机制对性能的影响。

1 ArrayList特点

1.底层是数组结构,按照插入顺序来保存元素,可以利用下标来查找值
2.按照下标访问元素最快
3.在中间插入元素很慢,删除元素很慢
4。线程不安全,看源码并没有synchronized对核心方法进行加锁

2 须知

1.ArrayList的实现原理就是数组,他的线程不安全,允许其中的元素为null,
2.因为底层结构是数组,占据的连续内存的空间,长度是数组的大小,因为是数组所有有数组的缺点,空间效率不高,查询款,时间效率高。
3.数组就会进行扩容操作,扩容操作是ArrayList存储操作缓慢的主要原因,尤其是当数据量越来越大,每次扩容消耗的时间会越来越多
4.在使用的时候最好是给一个初始化的长度,这样会提高效率

3构造方法

在这里插入图片描述
1.第一个构造方法比较简单。 主要是elementData 这个数据是真正存元素的数组

transient Object[] elementData; // non-private to simplify nested class access

2.第二个构造方法是默认的构造方法.其中执行的是将默认的构造方法是将空数组赋值给了elementData。这个是赋值给elementData的的空数组
在这里插入图片描述
3.第三个构造方法传入的是一个集合,把传入的对象赋值给elementData。前面提到这个擦拭真正的存放元素的地方

attaylist的源码不同HashMap。所以下面我们就看下他的集合核心方法

3 第一个add方法相关

在这里插入图片描述
作用是添加一个元素到arraylist尾部
在这里插入图片描述
解释下上面的方法:

  1. ensureCapacityInternal(int minCapacity),判断是不是第一次初始化数组,如果是的话,第一次添加元素的时候需要给定默认的长度为10
  2. ensureExplicitCapacity(minCapacity);。这个方法是判断需不需要扩容。里面的判断数组的数组的长度是不是小于数据量的数量,如果小于则需要进行扩容。modCount这个参数是记录列表被修改的次数
    3.grow(int minCapacity)是扩容方法。想知道具体判断的可以看下原理。

4 第二个添加的方法

在这里插入图片描述
这个添加方法和第一个类似,就是指定下标的时候需要copy数组,进行重新的赋值。嗯~比较简单么啥说的,自己看源码就知道了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值