ArryList的源码逻辑(添加、删除、获取)

注:ArrayList的底层就是一个空的数组elementData[],他是ArrayList的所有元素存放的容器。

1、ArrayList添加

  1. 在add新元素,首先会判断是否需要扩容。进入判断是否需要扩容方法。
  2.                          ↓ size+1(因为我们添加一个元素,这也是所需最小的容量)
  3. 进入是否需要扩容的方法后(1.需要计算扩容多少。2.计算好扩容红高粱后,进行扩容方法) 
  4.                          ↓  进入计算扩容方法(传入最少所需扩容量,elementData)                                                    
  5.    计入计算扩容计算方法(判断传入的elementData是否为空,如果是空,那么默认扩容量10和最少扩容量那个大返回那个,。如果不是那么直接返回最少空容量)
  6.                          ↓ 进入扩容方法(传入计算好的扩容量)
  7. 扩容量减去elementData.lenngth()>0则需要扩容,小于0则不需要扩容
  8.                          ↓ 进入扩容方法(传入最少扩容量)
  9. 扩容量=elementData..lenngth()+elementData.lenngth()》1(右移以为等于除以2)。进行扩容量和最少扩容比较,那个大扩容数量为那个。最终把扩容量赋值给elementData生成一个新的数组
  10.                          ↓ 返回最开始的add方法
  11. 把传入的元素放入elementData。

2、ArrayList删除

  1. 通过size-下标-1的方式获取到需要移动的元素个数。
  2. 把需要移动的元素移动到删除元素下标的位置。
  3. 最后把删除的元素值为空,jvm会进行垃圾回收
上一篇:ArrrayList的扩容机制


下一篇:Typora MarkDown语法