今天在阅读ArrayList源码的时候发现在remove()方法里面利用了System.arraycopy()的方法来复制数组
System.arraycopy(elementData, index+1, elementData, index,
numMoved);
这里复制的时候,并没有将remove的元素也复制,那么System.arraycopy是如何实现对数组的复制的呢?
首先来看一下System.arraycopy()方法的介绍
public static void arraycopy(Object src,
int srcPos,
Object dest,
int destPos,
int length)
src:源数组;
srcPos:复制源数组的起始位置;
dest:目的数组;
destPos:放置目的数组的起始位置;
length:需要复制的长度。
注意:src 和 dest都必须是同类型或者可以进行转换类型的数组。
System.arraycopy()方法的拷贝是浅拷贝,也就是说只能复制地址,并不能复制值。
在remove(index)方法中,我们只需要将remove元素后面的元素从index开始复制,就实现了remove的操作。
注意在复制完之后,要讲源数组的最后一位设为空,因为数组变小了
elementData[--size] = null;