ArrayList的add方法详解——让我们好好看看一个元素是如何插入到ArrayList集合当中(源码级别)

先看看源码的add方法都涉及到了那些主要方法

        这是add方法

        这是确保内部容量方法和判断是否扩容方法

        这是扩容方法

一、没有手动设置集合大小

1) 确保内部容量< ensureCapacityInternal(size + 1) >;
2) 判断数组是否为未初始化状态< if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) > ;
3) 如果是则进行初始化,并且选择(默认数组大小10,或者用户设置的大小)中取最大作为数组长度 < minCapacity = Math.max(DEFAULT_CAPACITY, minCapacity);  > ;
4) 如果数组已经初始化数组,执行下一步判断是否需要扩容 < ensureExplicitCapacity(minCapacity) > ;
5) 判断数组是否需要扩容<  if (minCapacity - elementData.length > 0) grow(minCapacity) >;
6) 如果需要扩容, 就按当前数组大小加上它的一半作为扩容之后的数组长度<  int newCapacity = oldCapacity + (oldCapacity >> 1) >, 进行下一步操作;
7) 如果不需要扩容,进行下一步操作;
8) 将元素插入到数组的尾部<  elementData[size++] = e >

二、有手动设置集合大小

1)确保内部容量< ensureCapacityInternal(size + 1) >;
2)判断数组是否为未初始化状态< if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) > ;
3)因为已经指定数组大小(也就是说已经初始化数组) 判断之后直接执行下一步 判断不否扩容< ensureExplicitCapacity(minCapacity) > ;
4)判断数组是否需要扩容<  if (minCapacity - elementData.length > 0) grow(minCapacity) >;
5)如果需要扩容, 就按当前数组大小加上它的一半作为扩容之后的数组长度<  int newCapacity = oldCapacity + (oldCapacity >> 1) >, 进行下一步操作;
6)如果不需要扩容,进行下一步操作;
7)将元素插入到数组的尾部<  elementData[size++] = e >

 ****别急这还有重点****

问: ArrayList(int initialCapacity)会不会初始化数组大小?

答: 会初始化数组大小!但是List的大小没有变,因为list的大小是返回size的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值