ArrayList扩容方式的理解

由图可知,arrayList有三个构造方法

ArrayList的扩容机制

  • ArrayList是一个动态数组,在使用的过程中它会去根据情况动态的改变集合的大小。
  • ArrayList的默认初始容量为10,注意,当我们刚创建一个ArrayList的时候,它的容量大小为0,只有在执行第一次add操作时,才会扩容到10;
  • ArrayList也提供了一个自定义初始容量大小的构造方法,我们可以通过改方法自定义ArrayList的初始容量;
  • ArrayList的扩容机制,当我们在执行add操作时,发现当前集合容量大小不够了,会扩容到原容量的1.5倍,也就是增加原容量的0.5倍大小,比如大小为10,扩容后为15。

private void grow(int minCapacity) {
        int oldCapacity = elementData.length;
        // 这是扩容的核心代码
        /**
        * oldCapacity >> 1 :表示数组的原来长度进行 除2操作
        * 	例如:oldCapacity = elementData.length = 10
        * 		二进制表示为:1010,向右以为后:0101 = 5
        * 总的来说:就是把原来的数组长度 *1.5
        */
        int newCapacity = oldCapacity + (oldCapacity >> 1);
     
        if (newCapacity - minCapacity < 0)
            newCapacity = minCapacity;
        if (newCapacity - MAX_ARRAY_SIZE > 0)
            newCapacity = hugeCapacity(minCapacity);
       
        elementData = Arrays.copyOf(elementData, newCapacity);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值