2008年06月02日

VectorとArrayList

『VectorとArrayList』

Javaには、オブジェクトの可変長配列を実装する
java.util.Vectorとjava.util.ArrayListというクラスが提供されていますが、
内部的にはelementDataというObject型の配列に要素を格納している。

利用する側は、何も考えずにaddメソッド(要素の追加・挿入を行う)を
使えば勝手に要素が追加されていっているような感じがしますが、
Vector・ArrayListの内部では要素追加時に現在のelementDataのサイズを
拡大する処理を行っている。
VectorとArrayListを、デフォルトコンストラクタでインスタンスを生成した場合、
それぞれのelementDataはサイズ10で初期化される。

Vector vec = new Vector();    ・・・・1
ArrayList arr = new ArrayList(); ・・・・2

String value = "value";

for (int i = 0; i < 11; i++) {
vec.add(value); ・・・・3
arr.add(value); ・・・・4
}

※ 1、 2 の段階では、それぞれのelementDataはサイズが10です。
※ for文において、i == 10 の時の、3・4のコード実行時にelementDataの
容量拡大の処理がそれぞれ行われる。


Vectorの容量拡大の処理は、現在のelementDataのサイズを
2倍した数でelementDataを生成しなおしている。
上記例でいいますと、i == 10 の時の、addメソッド実行時に
vecのelementDataはサイズ20になる。

ArrayListの容量拡大の処理は、現在のelementDataのサイズを
3倍した数を2で割って、更にその後 + 1を足した数で
elementDataを生成しなおしている。

※(elementDataのサイズ * 3) / 2 + 1 になります。
上記例でいいますと、i == 10 の時の、addメソッド実行時にarrの
elementDataはサイズ16になる。





増補改訂版Java言語で学ぶデザインパターン入門


taka_saku2000 at 20:11│Comments(0)TrackBack(0) Java 

トラックバックURL

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔