ArrayList扩容机制及源码分析

1、扩容特点

  1. ArrayList中维护了一个Object类型的数组,elementData

  2. 每当创建Arraylist的对象的时候,如果是无参构造,则初始的elementData是0第一次添加数据到里面的时候,elementData扩容为10,如果需要再次扩容,则扩容为原来的1.5倍

  3. 如果使用的是指定大小的构造器,则初始的elementData的容量就是指定的大小,扩容的话也是直接扩容为elementData的1.5

2、源码解读e62d9294d3ad4c92ade0a3c668d3de81.png

在源码中主要有几个成员变量

  • elementData:动态数组,也就是我们存储数据的核心数组(底层)

  • DEFAULT_CAPACITY:数组的默认长度

  • size:记录有效的数组长度。

  • EMPTY_ELEMENTDATA DEFAULTCAPACITY_EMPTY_ELEMENTDATA:两个空数组

空参构造28b310330b6d4bbb8992624312713792.png

2.ArrayList(int initialCapacity)9e5b8daa378c4bfb94cec80a67505522.png

3.ArrayList(Collection<? extends E> c)

传入集合c作为ArrayList中的elementData294a0f6c7bf2413f8fda2ac785ad7cd0.png

4.grow(int minCapacity)(★)

26eb8c33fdb94ea3abbbc4f679c9e551.png

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值