ArrayList动态扩容原理(部分源码展示)

ArrayList动态扩容原理(部分源码展示)

ArryList的动态扩容:每当执行添加元素的方法,ArrayList会检查内部数组的容量是否足够,如果不够,它就会以当前容量的1.5倍来重新构建一个数组,将旧元素Copy到新数组中,然后丢弃旧数组。

核心方法:
ArrayList的grow方法会判断当前数组容量是否足够,不够就通过copyOf()方法创建一下新的数组并把旧数组的内容copy过去

private void grow(int minCapacity) {
   
        // overflow-conscious code
        int oldCapacity = elementData.length;
//        对数组进行扩容,设置新数组的容量扩展为原来数组的1.5倍
        int newCapacity = oldCapacity + (oldCapacity >> 1);
        //判断新数组的容量够不够,够了就直接使用这个长度创建新数组,
        //不够就将数组长度设置为需要的长度
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
        //判断有没超过最大限制
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);
        // minCapacity is usually close to size, so this is a win:
        //创建新数组,将原来数组的值copy新数组中去, ArrayList的引用指向新数组
        // 因此鼓励在合适的时候通过构造方法指定默认的capaticy大小
        elementData = Arrays.copyOf(elementData, newCapacity);
    }

ArrayList类的部分代码及注释:

public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
   

//    声明序列号

    private static final long serialVersionUID = 8683452581122892189L;

    /**
     * Default initial capacity.
     */
//    设置默认容量
    private static final int DEFAULT_CAPACITY = 10
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值