的实现ArrayList#remove(E)
如下
public E remove(int index) {
rangeCheck(index);
modCount++;
E oldValue = elementData(index);
int numMoved = size - index - 1;
if (numMoved > 0)
System.arraycopy(elementData, index+1, elementData, index,
numMoved);
elementData[--size] = null; // Let gc do its work
return oldValue;
}
elementData
支持元素数组在哪里。
换句话说,它不是一个转变,因为它是元素的副本,减去缺失的元素。
给予elementData
10 个元素
[ 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10]
^ index 4
删除索引 4 处的元素会做
// copy elements starting from index+1
[ 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10]
^ index+1
// to the same array starting at index
[ 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10]
^ index
// resulting in
[ 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | null ]
get(4)
然后将返回值 (6)`。
apiList
状态
移除此列表中指定位置的元素(可选操作)。将任何后续元素向左移动(从它们的索引中减去 1)。返回从列表中删除的元素。
如何实施取决于实施者。以上只是ArrayList
的实现。