StoryEdit 開発日誌

ウェブアプリ StoryEditを作ってましたが延期。普通のブログ。

VectorとArrayList

描画にベクトル計算を使おうとおもって、Vectorで調べていたら、java.util.Vectorを発見。しかし、Vectorは「オブジェクトを格納できる配列」だったわけで、ベクトル計算をするためのものではなかった。(結局、javax.vecmath.Vector2dを使ってる)

しかし、ここで気になった。java.util.Vectorってjava.util.ArrayListと何が違うのか。

調べれば一発だったが、ArrayListが登場する前のArrayListの実装がVectorらしい。しかし、中身の違いは2つ。排他制御するかしないか、と、Growingのスピード。Vectorは、要素アクセスに排他制御があるため、複数スレッドを対象としない場合は遅いらしい。また、Vectorは2倍ずつ容量が増えていくのに対して、ArrayListは1.5倍。指数的に要素が増える場合以外は、ArrayListのほうが効率が良い、ということだ。おなじ関係が、HashTableとHashMap (Table --> Map)、となんだっけな、もうひとつあるらしいです。

、、、。しかし、勝手に同期処理するとは、Vectorはなんたるプリミティブ(Growing Arrayをあえてプリミティブと呼ぶが)だ。笑