3

size()したがって、最も効率的なコードを取得するために、Javaのメソッドがどのように機能するかを本当に知りたいと思いましたArrayList...単純なリストのように、すべての位置を通過するすべての要素をカウントしますか?それとも、最後に登録されたインデックスでサイズを取得するだけですか?

前もって感謝します!

4

5 に答える 5

5

ソースコードを見て損はありません:

public int size() {
    return size;
}

インスタンス変数を返します - かなり高速です。

于 2013-03-19T23:34:17.563 に答える
2

最新の Java7 では、メンバー フィールドの値を読み取るだけではありません。

public int size() {
    checkForComodification();
    return this.size;
}

private void checkForComodification() {
    if (ArrayList.this.modCount != this.modCount)
        throw new ConcurrentModificationException();
}
于 2013-03-19T23:36:23.660 に答える
1

現在のサイズを格納するためArrayListの属性がありintます (たとえば、 と呼ばれsizeます)。明らかに、効率のために配列リストのサイズを計算することはO(1)操作である必要があります。(二重リンク リスト)などのデータ構造でも、LinkedList必要になるたびにサイズを計算する必要がないように、サイズは属性で更新されます。より明確に確認するには、OpenJDKのソース コードを見てください。

 /**
  * The size of the ArrayList (the number of elements it contains).
  *
  * @serial
  */
  private int size;

 /**
  * Returns the number of elements in this list.
  *
  * @return the number of elements in this list
  */
  public int size() {
      return size;
  }
于 2013-03-19T23:35:18.077 に答える
0

のソース コードによるとArrayList、このsize()メソッドは という名前のプライベート変数を返しますsize。これは、 ごとにインクリメントされる単なるカウンタですadd

于 2013-03-19T23:34:37.157 に答える
0

フィールド変数を読み取ります。Java 1.6 の場合ArrayList.size():

/**
 * Returns the number of elements in this list.
 *
 * @return the number of elements in this list
 */
public int size() {
    return size;
}
于 2013-03-19T23:34:37.687 に答える