ArrayList的基本工作原理詳解remove
阿新 • • 發佈:2019-01-24
其實remove(index),add(index,e)類似去操作下標增加或者刪除的。其實用ArrayList挺費勁的。
下面就看看費勁在哪。
拿remove來說
public E remove(int index) {
//第一步先判斷是否有越界,如果越界直接IndexOutOfBoundsException
rangeCheck(index);
modCount++;
//把該元素從陣列中提出
E oldValue = elementData(index);
//需要複製的長度
int numMoved = size - index - 1;
if (numMoved > 0)
//原陣列,從哪開始複製,目標陣列,複製起始位置,長度。過程如下圖:
System.arraycopy(elementData, index+1, elementData, index,
numMoved);
//賦值null等待回收
elementData[--size] = null;
return oldValue;
}
比如刪除下標3的元素
原陣列:elementData
從哪開始複製:index+1 = 4
目標陣列:elementData
複製起始位置:index =3
長度: size - index - 1=6
所以使用Array按照下標去實現刪除效率很低