0

デコンパイラでArray Listクラスを調べていたところ、このメソッドが見つかりました..

private void fastRemove(int paramInt)
  {
    this.modCount += 1;
    int i = this.size - paramInt - 1;
    if (i > 0)
      System.arraycopy(this.elementData, paramInt + 1, this.elementData, paramInt, i);
    this.elementData[(--this.size)] = null;
  }

fastRemove() メソッドが本当に必要な条件を知りたいだけです。理解が明確になるように例を提供してください

ここに画像の説明を入力

4

3 に答える 3

2

このメソッドのコメントから:

境界チェックをスキップし、削除された値を返さないプライベート remove メソッド。

ご覧のとおり、これはpublic remove()メソッドによって内部的に呼び出されます。このメソッドのソースコードを見ると、いつ、なぜこのfastRemove()メソッドが呼び出されるのかを明確に解読できます。

public boolean remove(Object o) {
    if (o == null) {
      for (int index = 0; index < size; index++)
        if (elementData[index] == null) {
            fastRemove(index);
            return true;
        }
    } else {
        for (int index = 0; index < size; index++)
        if (o.equals(elementData[index])) {
            fastRemove(index);
            return true;
        }
        }
    return false;
}

このメソッドの考え方は単純です。境界チェックを実行せず、配列を内部的に再配置します。

于 2012-09-02T16:57:23.690 に答える
2

ユーザーがそのメソッドを直接呼び出すことはありません (したがって、キーワードprivate)。が呼び出されたfastRemove()ときに実際に削除を行うものです。remove(Object o)

于 2012-09-02T16:56:17.597 に答える
0

fastRemove(...)ArrayListクラス内のメソッドによって使用される、クラスで使用されるプライベート メソッドremoveです。プライベートメソッドであるため、これfastRemoveを使用することはできません。removeただし、このメソッドを使用するメソッドを使用できます。方法の要約からremove: -

Removes the first occurrence of the specified element from this list,
if it is present.  If the list does not contain the element, it is
unchanged.
于 2012-09-02T16:53:30.187 に答える