読者です 読者をやめる 読者になる 読者になる

この日記は私的なものであり、所属会社の見解ではありません。 GitHub: takahashikzn

リストの最速ループの書き方

Java

処理順序が重要でない場合に、ArrayListや配列を走査する場合には、フツーなら

for (int i = 0; i < list.size(); i++) {
    Object o = list.get(i);

    ...(略)
}

とかやる*1わけだが、

昔は色々と病気に罹患していた*2ため、こんな書き方をしてしまっていた。

for (int i = list.size(); i > 0; ) {
    Object o = list.get(--i);

    ...(略)
}

この書き方だと、

  • list.size()は一回しか実行しない
  • 0との比較はバイトコード上は特別扱い(インストラクションが減る)なので、ちょっと早くなる

なので、たぶん最速だと思う。(もし他にあったら教えてください)


ちなみに、

for (int i = list.size(); i-- > 0; )

としないのは、iが0のときの無駄なデクリメント処理('0'→'-1')が走るのを防ぐため。

...ということを

ふと思い出した。まぁそんだけ。
もちろん今は、可読性を最重要視した書き方を心がけてます。

*1: もちろん可読性の観点からはIteratorを使うのがベストだが、それは置いておく

*2: 過剰な最適化病、とでも名付ければいいかな