ブログトップ 記事一覧 ログイン 無料ブログ開設

水まんじゅう

 | 

2011-06-19

実装を知るって大切 Collections#sort

Listをソートしてくれるのだけれども

Collections#sortはList(正確にはコレクションフレームワーク)をソートしてくれるメソッドなんだけれども、
昔、以下のようなコードを見たことがある。

String[] anArray = getAnArray();
List<String> list = Arrays.asList(anArray);
Collections.sort(list);
return list;


仕様としてはレガシーな配列を受け取りソートしてListとして返すだけなんだけれども、
実はよろしくない。

Collections#sortの中身をみる

中身は以下のような感じ。

Object[] a = list.toArray();
Arrays.sort(a);
ListIterator<T> i = list.listIterator();
for (int j=0; j<a.length; j++) {
 i.next();
 i.set((T)a[j]);
}


実は中では一度配列に変換してからソートして、再度Listに詰めなおしている。

ちょっとだけ最適化を試みる

こんな感じに。

String[] anArray = getAnArray();
Arrays.sort(anArray);
List<String> list = Arrays.asList(anArray);
return list;


速度的にもリソースの消費量的にもほとんど大丈夫なんだろうけれども、
こういうちょっとした積み重ねでプログラムって重くなっていくんだろうなぁと思って
ずっと心に留めている。

余談だけれども

一度、Listのソートをするのに自前でバブルソートを書いたという話を聞いたことがある。
そんなのは論外。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/megascus/20110619/1308485980
 |