Java中的ArrayList的初始容量和容量分配

本文详细解析了Java中ArrayList的初始容量和容量分配机制。在ArrayList中,Capacity和size有着明确的区别,Capacity是底层数组的长度,而size则表示列表对象的数量。在添加元素时,若size超过Capacity,ArrayList会自动扩容,通常是扩大到原容量的1.5倍。通过`add()`和`remove()`方法的源码分析,展示了ArrayList如何动态调整容量和大小。此外,文章还提到可以通过`ensureCapacityInternal()`方法手动指定ArrayList的容量,以提高性能。
摘要由CSDN通过智能技术生成

if (elementData.getClass() != Object[].class)

elementData = Arrays.copyOf(elementData, size, Object[].class);

}

二、ArrayList实现自动改变size机制

为了实现这一机制,java引进了Capacity和size概念,以区别数组的length。为了保证用户增加新的列表对象,java设置了最小容量(minCapacity)

,通常情况上,它大于列表对象的数目,所以Capactiy虽然就是底层数组的长度(length),但是对于最终用户来讲,它是无意义的。而size存储着列表

对象的数量,才是最终用户所需要的。为了防止用户错误修改,这一属性被设置为privae的,不过可以通过size()获取。

下面,对ArrayList的初始以及其列表对象的增加和删除等三种情况下的size自动改变机制进行分析。

1、初始Capacity和size值。

从上面给出的ArrayList构造方法源码中,我们不难看出Capacity初始值(initialCapacity)可以由用户直接指定或由用户指定的Collection集合存

储的对象数目确定,如果没有指定,系统默认为10。而size的被声明为int型变量,默认为0,当用户指定Collection创建ArrayList时,size值等于

initialCapacity。

2、add()方法

该方法的源码如下:

public boolean add(E e) {

ensureCapacityInternal(size + 1);

elementData[size++] = e;//添加对象时,自增size

return true;

}

方法中调用的ensureCapacityInternal主要用来调整容量,修改elementData数组的指向。其中涉及到3个方法的调用,其核心在于grow方法:

private void ensureCapacityInternal(int minCapacity) {

  • 27
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值