ArrayListソースコード – Removeメソッドの流れ
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の変更回数をインクリメントし、フェイルファーストを実現します。
- そして、elementData(index)メソッドから削除される要素を取得し、oldValue変数に格納する。
- 次に、移動する要素の数を numMoved = size – index – 1 と計算します。numMoved > 0 の場合は、それ以降の要素を 1 つ前方に移動する必要があります。
- System.arraycopyメソッドを使用して、後ろの要素を1つ前に移動します。
- 最後の要素を null にすることで、ガベージコレクションしやすくなる。
- 最後に削除した要素を戻します。