[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends-ml 10590] Re: レガシーコレ クションクラス (Re: リファクタリングを読む会第 6 回議事録)



柴田です。

元のサンプルプログラムを見ると、おそらく以下の点で期待したパフォーマンス
の差が出ていないのだと思います。

[1] ensureCapacityの実装は、確かに若干違いますが、サンプルプログラムにお
ける、add操作のN回に対して、配列を大きくして、内容をコピーするという処理
が何回行われているかが問題となります。しかし、N回は行われていないことは
確かです。

[2] remove(Object)は、配列から要素を取り除く操作なので、remove操作をN回
行えば、当然arraycopyがN回行われます。サンプルプログラムの場合には、先頭
から常に取り出す操作となるので、結構な量のコピーが行われます。

[3] [1]の差は、[2]の処理時間と比べると、サンプルプログラムの場合は、無視
しても良いぐらいの差です。

[4] 実は、ArrayListのremove(Object)メソッドは、AbstractCollectionの
remove(Object)メソッドをオーバーライドしていないために、非効率な実装とな
っています。Vectorのremove(Object)は、ちゃんとオーバーライドして最適に実
装されています。

"TAKAHASHI, Tomohiro" wrote:
> 
>   高橋(智)です。
>   情報ありがとうございます。
>   http://www.onjava.com/pub/a/onjava/2001/05/30/optimization.html
> の記事も参考になるかもしれません。
> 
>   Vector と ArrayList との違いと言えば、Vectorには以下のような
> コンストラクタがあって、addメソッド内で使用されるensureCapacity
> メソッドの実装が違うことでしょうか。
> ----------------------------------------------------------------------
> public Vector(int initialCapacity, int capacityIncrement)
> 
> Constructs an empty vector with the specified initial capacity and
> capacity increment.
> 
> Parameters:
>      initialCapacity - the initial capacity of the vector.
>      capacityIncrement - the amount by which the capacity is increased
>                          when the vector overflows.
> ----------------------------------------------------------------------
> 
> --
> 高橋智宏
>   Java読書会( http://www.t3-jpn.com/bof/ )
>   T3-Japan( http://www.t3-jpn.com/ )
> 
> Arai Noric wrote:
> >
> > 新井です。
> > 参考になるか分かりませんが、Java technology Tips 2月20日版です(Webでは
> > 乗ってないかも)
> > ポイントは
> > -------------------------------------
> > Vector がありますが、これは古いバージョン
> > のコレクションクラスの一部です。(以前のリリースからのクラスがいくつかあ
> > りますが、これは Collections Framework に以前のものを組み込むために提供
> > されており、一般的には新しいプログラムでの使用は推奨されていません。)
> > -----------------------------------
> > ですね・・・どこで推奨されていないかは分かりませんが・・
> snip

-- 
Yoshiki Shibata