ArrayList中add方法实现原理

每次扩容为原来的 1.5倍
首先当我们在用 list.add(Object); 首先 在add的方法执行 ensureCapacityInternal(int minCapacity){} 方法 参数为 当前list.size() + 1

后执行 ensureExplicitCapacity(calculateCapacity(elementData, minCapacity));

先 执行参数中的方法calculateCapacity(Object[] elementData, int minCapacity)

在方法中先 判断 emementDate (等价于 ArrayList 存储元素的数组)是否为空

为空 则 执行return Math.max(DEFAULT_CAPACITY, minCapacity);

DEFAULT_CAPACITY 为 数组初始长度 为10 minCapacity=为 ArrayList当前数组动态数组长度

Math.max(); 比较 DEFAULT_CAPACITY 和 minCapacity 大小 输出 大的那个数 为长度

得到参数后然后在执行ensureExplicitCapacity(int minCapacity) 如果 参数 减去ArrayList.length >0

就执行 grow(minCapacity); 方法
int oldCapacity = elementData.length; //定义一个现有的长度
int newCapacity = oldCapacity + (oldCapacity >> 1); //定义一个 新长度
if (newCapacity - minCapacity < 0) //如果新长度减去 参数的长度 小于0
newCapacity = minCapacity; //那么长度就为 这个参数
if (newCapacity - MAX_ARRAY_SIZE > 0) //新长度 减去 数组最大长度
newCapacity = hugeCapacity(minCapacity); //新长度 为 int最大的值

			private static int hugeCapacity(int minCapacity) {
			        if (minCapacity < 0) // overflow
			            throw new OutOfMemoryError();
			        return (minCapacity > MAX_ARRAY_SIZE) ?         // 执行 hugeCapacity  将 最大的值给  minCapacity
			            Integer.MAX_VALUE :
			            MAX_ARRAY_SIZE;
			    }
		
	
	
			        // minCapacity is usually close to size, so this is a win:
	        elementData = Arrays.copyOf(elementData, newCapacity);          // 将 newCapacity  给   elementData
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值