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; // 返回删除的元素
}

手順は以下の通りです。

  1. 首先、rangeCheck(index)メソッドにより、インデックスの範囲外チェックが行われ、範囲外の場合、IndexOutOfBoundsException例外がスローされます。
  2. 次に、modCount++を行ってArrayListの変更回数をインクリメントし、フェイルファーストを実現します。
  3. そして、elementData(index)メソッドから削除される要素を取得し、oldValue変数に格納する。
  4. 次に、移動する要素の数を numMoved = size – index – 1 と計算します。numMoved > 0 の場合は、それ以降の要素を 1 つ前方に移動する必要があります。
  5. System.arraycopyメソッドを使用して、後ろの要素を1つ前に移動します。
  6. 最後の要素を null にすることで、ガベージコレクションしやすくなる。
  7. 最後に削除した要素を戻します。
コメントを残す 0

Your email address will not be published. Required fields are marked *


广告
広告は10秒後に閉じます。
bannerAds