size()したがって、最も効率的なコードを取得するために、Javaのメソッドがどのように機能するかを本当に知りたいと思いましたArrayList...単純なリストのように、すべての位置を通過するすべての要素をカウントしますか?それとも、最後に登録されたインデックスでサイズを取得するだけですか?
前もって感謝します!
size()したがって、最も効率的なコードを取得するために、Javaのメソッドがどのように機能するかを本当に知りたいと思いましたArrayList...単純なリストのように、すべての位置を通過するすべての要素をカウントしますか?それとも、最後に登録されたインデックスでサイズを取得するだけですか?
前もって感謝します!
最新の Java7 では、メンバー フィールドの値を読み取るだけではありません。
public int size() {
checkForComodification();
return this.size;
}
private void checkForComodification() {
if (ArrayList.this.modCount != this.modCount)
throw new ConcurrentModificationException();
}
現在のサイズを格納するため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;
}
のソース コードによるとArrayList、このsize()メソッドは という名前のプライベート変数を返しますsize。これは、 ごとにインクリメントされる単なるカウンタですadd。
フィールド変数を読み取ります。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;
}