実行時間を計測したい

実行時間を計測したいんだけど〜。それ、クラスSystemのcurrentTimeMillisで、できるよ。


currentTimeMillis

public static long currentTimeMillis()

ミリ秒で表される現在の時間を返します。戻り値の時間単位はミリ秒ですが、値の粒度は基本となるオペレーティングシステムによって異なり、単位がより大きくなる場合があります。たとえば、多くのオペレーティングシステムでは、時間を 10 ミリ秒の単位で計測します。

「コンピュータ時間」と協定世界時 (UTC) との間に発生する微妙な相違については、Date クラスの説明を参照してください。

戻り値:
ミリ秒で測定した、現在時刻と協定世界時UTC 1970 年 1 月 1 日午前 0 時との差
Oracle Technology Network for Java Developers | Oracle Technology Network | Oracle

例えば、StringBufferの速さを確かめたければ、以下のようにしてみる。

  1 public class Main {
  2   public static void main(String[] args) {
  3     long start = System.currentTimeMillis();
  4     StringBuffer sb = new StringBuffer();
  5     for(int i=1;i<10000;i++){
  6       sb.append("Hello");
  7     }
  8     long end   = System.currentTimeMillis();
  9     System.out.println(msToSecs(end-start));
 10   }
 11   public static String msToSecs(long t) {
 12     return t/1000 +"." +t%1000;
 13   }
 14 }
$ java Main.java
$ java Main
0.6

System.currentTimeMillis()が返すのはミリ秒単位なので、1000で割って、秒単位にする。

2008年12月23日追記

データ構造とかアルゴリズムとかよく分からなくても、実行時間を計測すれば『どっちが速いか』は知ることができる。