ArrayList扩容机制

ArrayList的底层原理

ArrayList<String> list1 = new ArrayList<>();
list1.add("aaa");
list1.add("bbb");
//一次添加一个数据


ArrayList<String> list2 = new ArrayList<>();
list2.addAll(list1);//一次添加多个数据

1.当我们利用空参构造创建一个ArrayList对象时,java会在底层创建一个默认长度为0的数组

数组名为elementData 有一个成员变量为Size,用来记录元素的个数

2.当调用add添加第一个元素时,会在底层创建一个新的长度为是10的数组初始化值都为Null

是添加第一个元素这个数组才会出现

假如此时添加一个元素"a" 此时a进入数组,size++为1

 此时size有两层含义:表示元数个数 也表示下次元素存入的位置;

假如添加方式为一个一个逐个添加:

当数组存满后会创建一个新的数组,新数组的大小会根据原来的数组大小自动扩容1.5倍,再把所有元素拷贝到新的数组,新数组存满后,会继续执行上面的操作,扩容1.5倍并拷贝原来的数组

假如以数组的方式进行添加,一次添加多个元素:

如果1.5倍还放不下,则新创建的数组的长度以实际为准;

 public ArrayList() {
        this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;//默认初始长度为0
    }
ArrayList<String> List = new ArrayList<>();
list.add("aaa") //添加第一个元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值