2012-09-02 67 views
0

我正想通過decomplier數組列表類已經發現這個方法..關於fastRemove()方法

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

+0

你從哪裏找到ArrayList中的這樣一個方法?如果我沒有犯錯,就沒有這樣的方法。 http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html – Ruwantha

+0

@ RJ45快照附加.. !! – user1633823

回答

0

fastRemove(...)是其中使用由在類remove方法ArrayList類中使用的私有方法。由於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. 
2

用戶絕不會直接調用該方法(因此關鍵字private)。 fastRemove()實際上是在調用remove(Object o)時刪除的。

2

從這個方法的註釋:

一個跳過邊界檢查,並且不返回 刪除值

私人remove方法。

正如您可能已經看到的,這是由publicremove()方法在內部調用的。如果你看看源代碼這種方法,你可以清楚地破譯這個時候,爲什麼這個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; 
} 

有這種方法的想法很簡單:不要執行任何約束檢查和在內部重新排列陣列。