以ArrayList集合中remove为例子:
public E remove(int index) {
rangeCheck(index);
modCount++;
E oldValue = elementData(index);
//被移动的位置
int numMoved = size - index - 1;
if (numMoved > 0)
//数组复制。
//原数组为elementData
//原数组复制的起始位置index+1
//目标数组为elementData
//目标数组复制的起始位置index
//复制的长度numMoved
//eg. {1,2,3,4,5,6,7} 移走5,numMoved = 7-4-1 = 2,
//6和7要移动,那么原数组复制的起始位置5从6开始,复制长度为2,那么就是6和7
//目标数组的其实位置是4,就是5的位置,那么5和6被搞成了6和7
//{1,2,3,4,6,7,7}
System.arraycopy(elementData, index+1, elementData, index,
numMoved);
//{1,2,3,4,6,7,7} 先把最后一位搞成null,然后数组长度减1.
elementData[--size] = null; // clear to let GC do its work
return oldValue;
}