#JAVA笔记ArrayList底层源码小结

ArrayList

1.Array List的特点:

1.实现了List接口,存储有序的,可以重复的数据。

2.底层使用Object[]数组存储。

3.线程不安全的。

2.ArrayList源码解析:

2.1jdk7版本:(以jdk1.7.0_07为例)

//如下代码的执行:底层会出初始化数组,数组的长度为10。Object[] elementsData = new Object[10];

ArratList list = new ArrayList<>();

list.add("AA"); //elementData[0] = "AA";
list.add("BB");//elementData[1] = "BB";
...

当要添加第11个元素的时候,底层的elementData数组已满,则需要扩容。默认扩容为原来长度的1.5倍。并将原有数组中的元素复制到新的数组中。

2.2 jdk8版本:(以jdk1.8.0_271为例)

//如下代码的执行:底层会出初始化数组,即Object[] elementsData = new Object[]{};//注:这里不会报错,相当于elementsData[0]=null;

ArratList list = new ArrayList<>();

源码里面:

public ArrayList() {
    this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;//得到一个数组,而这个数组的初始化为下面这个
}
 private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};//默认只初始化一个数组,不申请长度为10的数组
 
list.add("AA"); //首次添加元素时,会初始化数组elementData = new Object[10];   elementData[0] = "AA";

list.add("BB");//elementData[1] = "BB";
...

在这里插入图片描述

//默认为长度为10的数组

当要添加第11个元素的时候,底层的elementData数组已满,则需要扩容。默认扩容为原来长度的1.5倍。并将原有数组中的元素复制到新的数组中。

扩容的代码如下:

在这里插入图片描述

扩容1.5倍

小结:

jdk1.7.0_07版本中:ArrayList类似于饿汉式

jdk1.8.0_271版本中:ArrayList类似于懒汉式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值