JavaでCalendarクラスを使って月末を取得する2つの方法について速さを比較してみました。
実行環境は以下の通りです。
- DELL VOSTRO 1540
- Windows 10 Pro 32bit
- Intel Celelron 2.00 GHZ
- メモリ 2.0GB
- HDは約300GB
月末を取得する方法は以下の2つです。
- getActualMaximumメソッドを使用
- 翌日初日-1を設定
#ソースと実行結果
上記をそれぞれ30000回実行して時間を比較しました。以下、ソースと結果です。
ソース
package test;
import java.util.Calendar;
import java.util.function.IntSupplier;
public class Test {
// --計測用--
private void printProcessingTime(IntSupplier f) {
int count = 30000;
long start, end;
start = System.currentTimeMillis();
for (int i = 0; i < count; i++) {
f.getAsInt();
}
end = System.currentTimeMillis();
System.out.printf("出力確認:%s, 計測 %3d: ", f.getAsInt(), end - start);
System.out.println();
}
// --計測--
public static void main(String[] args) {
new Test().test();
}
private void test() {
// test1
System.out.println("test1");
printProcessingTime(() -> {
Calendar c = Calendar.getInstance();
c.clear();
c.set(2016, 1, 1);
return c.getActualMaximum(Calendar.DATE);
});
// test2
System.out.println("test1");
printProcessingTime(() -> {
Calendar c = Calendar.getInstance();
c.clear();
c.set(2016, 2, 1);
c.add(Calendar.DATE, -1);
return c.get(Calendar.DATE);
});
}
}
以下、実行結果です。
結果
test1
出力確認:29, 計測 286:
test1
出力確認:29, 計測 112:
getActualMaximumメソッドの方が遅いという結果が出ました。
#修正履歴
20161009
- 文言修正。
- ソースを修正し、java.util.functionを使用。
- 出力結果も再実施。