ArrayList扩容机制

ArrayList在Java中提供了不同的初始化方式,如无参数构造时容量为0,传入数值时按数值设置容量,传入集合时按集合大小设置。其扩容规则在add和addAll方法中有所不同,初始扩容通常为10,后续扩容是上次容量的1.5倍。在addAll时,若ArrayList为空,会根据传入集合大小决定扩容;已有元素时,会在下次需要的容量和当前元素数之间取较大值进行扩容。
摘要由CSDN通过智能技术生成

一:原始容量

1 使用空参构造时,原始容量为0
   public ArrayList() {
    this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}

   private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
2  传入数值时,以数值大小作为容量大小
public ArrayList(int initialCapacity) {
    if (initialCapacity > 0) {
        this.elementData = new Object[initialCapacity];
    } else if (initialCapacity == 0) {
        this.elementData = EMPTY_ELEMENTDATA;
    } else {
        throw new IllegalArgumentException("Illegal Capacity: "+
                                           initialCapacity);
    }
}
3 传入集合时,以集合大小作为容量大小
public ArrayList(Collection<? extends E> c) {
    Object[] a = c.toArray();
    if ((size = a.length) != 0) {
        if (c.getClass() == ArrayList.class) {
            elementData = a;
        } else {
            elementData = Arrays.copyOf(a, size, Object[].class);
        }
    } else {
        // replace with empty array.
        elementData = EMPTY_ELEMENTDATA;
    }
}

二:扩容规则

add方法:
     1 初次扩容是10
     2 每次扩容是上次1.5倍
addAll方法
  两种情况
  1 arraylist是空的情况下
    如果传入的集合元素小于10,则第一次扩容10;
    如果元素超过10,则以传入的元素个数为准


  2 arraylist已经有元素的情况下
    在下次扩容数量和元素个数之间选择一个较大值
    例如: 现在已经有10个元素,容量是10,
    在增加三个元素,此时扩容是15,因为15>13

    如果此次增加6个元素,
    那么扩容就是16,因为16>15
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值