ArrayList实现动态数组原理

addAll方法和申请数组大小函数

 public boolean addAll(Collection<? extends E> c) {  
   Object[] a = c.toArray();  
    int numNew = a.length;  
    ensureCapacity(size + numNew);      // Increments modCount System.arraycopy(a, 0, elementData, size, numNew); size += numNew; return numNew != 0; } public void ensureCapacity(int minCapacity) { modCount++; int oldCapacity = elementData.length; if (minCapacity > oldCapacity) { //判断是否大于默认申请空间 Object oldData[] = elementData; int newCapacity = (oldCapacity * 3)/2 + 1; //增加50%+1 if (newCapacity < minCapacity) //如果还是不够,直接让其等于最新的长度 newCapacity = minCapacity; // minCapacity is usually close to size, so this is a win: elementData = Arrays.copyOf(elementData, newCapacity); //新的数组 } }

 

照例来看一下addAll方法,ensureCapacityInternal判断当前的数字是否大于了申请的长度,如果空间不够了,在申请 1.5倍的空间+1,如果还是不够,直接让最新的长度等于需要的长度,然后将旧的数组给新的数组。

参考:http://blog.csdn.net/ZXC641483573/article/details/78106552?locationNum=7&fps=1

转载于:https://www.cnblogs.com/meituan/p/7941126.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值