注:ArrayList的底层就是一个空的数组elementData[],他是ArrayList的所有元素存放的容器。
1、ArrayList添加
- 在add新元素,首先会判断是否需要扩容。进入判断是否需要扩容方法。
- ↓ size+1(因为我们添加一个元素,这也是所需最小的容量)
- 进入是否需要扩容的方法后(1.需要计算扩容多少。2.计算好扩容红高粱后,进行扩容方法)
- ↓ 进入计算扩容方法(传入最少所需扩容量,elementData)
- 计入计算扩容计算方法(判断传入的elementData是否为空,如果是空,那么默认扩容量10和最少扩容量那个大返回那个,。如果不是那么直接返回最少空容量)
- ↓ 进入扩容方法(传入计算好的扩容量)
- 扩容量减去elementData.lenngth()>0则需要扩容,小于0则不需要扩容
- ↓ 进入扩容方法(传入最少扩容量)
- 扩容量=elementData..lenngth()+elementData.lenngth()》1(右移以为等于除以2)。进行扩容量和最少扩容比较,那个大扩容数量为那个。最终把扩容量赋值给elementData生成一个新的数组
- ↓ 返回最开始的add方法
- 把传入的元素放入elementData。
2、ArrayList删除
- 通过size-下标-1的方式获取到需要移动的元素个数。
- 把需要移动的元素移动到删除元素下标的位置。
- 最后把删除的元素值为空,jvm会进行垃圾回收