ArrayList源码逐句解析!(添加元素,add方法以及其重载方法,扩容机制grow)以及面试题(基于JDK1.8)

        上期我们已经逐句的解析了Arraylist的底层数据结构以及它的构造方法,不太熟悉的读者可以再去温故。

链接:ArrayList源码分析(底层数据结构,成员变量,构造方法)以及面试题(基于JDK1.8)

        本期我们将在其基础上,进一步阅读关于ArrayList的添加元素、删除元素以及其扩容机制的代码,希望能让读者有所收获,也希望各位读者对于本文的小错误能不吝赐教,码海无涯,愿与大家共勉。

1,ArrayList源码add方法逐句解析

        此处所提到的add方法,指add(E e)以及add(int index i,E element)方法,除此之外还有addAll方法,addAll方法通常用于将另一个集合的所有元素合并到当前的ArrayList中,读者可自行去了解,本处不再赘述其源码。接下来将以源码解析以及添加元素的具体过程两部分展开。

1,add源码解析

add(E e) 方法,是最常用的add方法,它接受一个元素并将其添加到ArrayList的末尾。如果添加成功,则返回true。

public  boolean add(E e) {
        ensureCapacityInternal(size + 1);
        //调用确保内部数组elementData有足够的容量来存储新元素。
            // 因为新元素将被添加到数组的末尾,所以需要检查数组是否有足够的空间。
        elementData[size++] = e;
        //将新元素添加到数组的末尾,并将数组的大小增加1。
        return true;
    }

我们注意到add(E e)调用了ensureCapacityInternal()方法,这个方法是用来确保内部数组elementData至少能够容纳minCapacity个元素,其代码如下。

private void ensureCapacityInternal(int minCapacity) {
            //这个方法确保内部数组elementData至少能够容纳minCapacity个元素。
        ensureExplicitCapacity(calculateCapacity(elementData, minCapacity));
        //通过调用ensureExplicitCapacity(calculateCapacity(elementData, minCapacity));来实现,
            // 后者计算所需的容量并确保达到这个容量。
    }

仔细阅读代码可以发现,ensureCapacityInternal()方法主要通过调用,ensureExplicitCapacity方法以及calculate方法实现,这两个方法分别的作用为:

ensureExplicitCapacity:确保内部数组elementData至少能够容纳minCapacity</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值