2012-09-24 84 views
3

我剛剛在Java 6中找到了一條功能不清楚的線路。「Object oldData [] = elementData」的用途是什麼?在ArrayList的ensureCapacity方法中?

這是ArrayList的ensureCapacity(int minCapacity)方法中的Object oldData[] = elementData;行。 oldData似乎是一個局部變量,在方法體的範圍內沒有用處。我在作業中錯過了一些隱藏的魔法嗎?

/** 
* Increases the capacity of this <tt>ArrayList</tt> instance, if 
* necessary, to ensure that it can hold at least the number of elements 
* specified by the minimum capacity argument. 
* 
* @param minCapacity the desired minimum capacity 
*/ 
public void ensureCapacity(int minCapacity) { 
    modCount++; 
    int oldCapacity = elementData.length; 
    if (minCapacity > oldCapacity) { 
     Object oldData[] = elementData; 
     int newCapacity = (oldCapacity * 3)/2 + 1; 
     if (newCapacity < minCapacity) 
      newCapacity = minCapacity; 
     // minCapacity is usually close to size, so this is a win: 
     elementData = Arrays.copyOf(elementData, newCapacity); 
    } 
} 

回答

5

沒有目的,它是一個不斷髮展的代碼和一個草率的程序員的人造物。

Arrays.copyOf()是在JDK 6推出之前,該代碼將不得不使用System.arrayCopy(),這需要舊數組引用(我沒有JDK 1.5的安裝很方便,但會願意賭這個)。

+0

+1,用於追蹤歷史記錄。順便說一句,我的IDE標誌着這個變量沒有被使用,並建議刪除,所以確實沒有必要。 –

+0

+1爲歷史背景,聽起來很有道理,看着java 5源碼:http://javasourcecode.org/html/open-source/jdk/jdk-5.0/java/util/ArrayList.java.html – mtsz

相關問題