其实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按照下标去实现删除效率很低