ArrayList的remove方法用于刪除ArrayList中指定位置的元素。下面是ArrayList的remove方法的源碼和流程:
public E remove(int index) {
rangeCheck(index); // 檢查索引是否越界
modCount++; // 修改ArrayList結構的操作數加1
E oldValue = elementData(index); // 獲取要刪除的元素
int numMoved = size - index - 1;
if (numMoved > 0) {
System.arraycopy(elementData, index + 1, elementData, index, numMoved); // 將后面的元素往前移動一位
}
elementData[--size] = null; // 將最后一個元素設為null,方便垃圾回收
return oldValue; // 返回刪除的元素
}
流程如下:
首先,通過rangeCheck(index)
方法檢查索引是否越界,如果越界則拋出IndexOutOfBoundsException
異常。
接下來,modCount++
將ArrayList
的修改操作數加1,用于實現fail-fast機制。
然后,通過elementData(index)
方法獲取要刪除的元素,并將其保存到oldValue
變量中。
接下來,計算出要移動的元素個數,即numMoved = size - index - 1
,如果numMoved > 0
,則需要將后面的元素往前移動一位。
使用System.arraycopy
方法將后面的元素往前移動一位。
將最后一個元素設為null,方便垃圾回收。
最后,返回刪除的元素。