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

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

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

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

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

Collections#sortの中身をみる

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

Object[] a = list.toArray();
Arrays.sort(a);
ListIterator i = list.listIterator();
for (int j=0; j

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

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

こんな感じに。

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

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

余談だけれども

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