[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