指定位置添加元素:
public void add(int index, E element) {
rangeCheckForAdd(index); // 判断index是否有效
ensureCapacityInternal(size + 1); // 上面已经讲过原理。
System.arraycopy(elementData, index, elementData, index + 1,
size - index); // 从该位置复制一份后面的值,全部往后移。
elementData[index] = element; // 最后在当前位置修改元素值。
size++;
}
看看ArrayList 是如何删除的:.
public E remove(int index) {
rangeCheck(index); // 判断角标是否越界
modCount++; //操作计数器(用于迭代器迭代的时候如果这个list发送变化,能够及时感知到,提前报错,而不是获取错误数据)
E oldValue = elementData(index);int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(elementData, index+1, elementData, index,
numMoved); // 从删除位置开始到最后的值,全部向前移动。
elementData[--size] = null; // clear to let GC do its work 最后一位清空。return oldValue;
}