3

Java 6で、機能がはっきりしない行に出くわしました。

ArrayListObject oldData[] = elementData;のメソッドの行です。メソッド本体のスコープで使用されていないローカル変数のように見えます。課題に隠された魔法が欠けていますか?ensureCapacity(int minCapacity)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);
  }
}
4

1 に答える 1

5

目的はありません、それは進化するコードとずさんなプログラマーのアーティファクトです。

Arrays.copyOf()はJDK6で導入されました。それ以前は、コードでを使用System.arrayCopy()する必要があり、古い配列への参照が必要でした(JDK 1.5のインストールは手元にありませんが、これに賭けるつもりです)。

于 2012-09-24T20:46:25.447 に答える