关于ArrayList类中的fastRemove()方法

时间:2012-09-02 16:41:39

标签: java collections

我在decomplier中通过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()方法的条件,请提供示例以便理解清楚

enter image description here

3 个答案:

答案 0 :(得分:2)

用户永远不会直接调用该方法(因此关键字private)。 fastRemove()是调用remove(Object o)时实际删除的内容。

答案 1 :(得分:2)

来自此方法的评论:

  

跳过边界检查但不返回的私有删除方法   删除了值。

正如您可能已经看到的那样,这是由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;
}

使用此方法的想法很简单:不执行任何绑定检查并在内部重新排列数组。

答案 2 :(得分: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.