最適化の章

5.1. ループ内で不変の処理を実行しない

『目的』

ループ内での不変の処理を避けて実行速度を上げましょう。

『Before』

ループ内で時間のかかるメソッドを呼び出してみます。

List<Integer> integers = new ArrayList<>();
  :
for (int i : integers) {
  int n = longTimeMethod();
  :
}

1回のループにつき必ず longTimeMethod が呼ばれます。
ループ時にnの値が変わらないのであれば無駄な処理ですね。

『After』

値をキャッシュすることで不要な処理を省きましょう。

List<Integer> integers = new ArrayList<>();
  :
int n = longTimeMethod();
for (int i : integers) {
  :
}

『まとめ』

微々たるものですが、確実に速くなります。
メソッドの重さによってはもっと大きく差が出てくるでしょう。

毎回メソッドを呼び出す必要がない場合は値をキャッシュしましょう。

< 前のページへ

Pagetop