1. java-beginner

    No comment

    java-beginner
Changes in body
Source | HTML | Preview
@@ -1,73 +1,86 @@
-こんにちは。ハンドルネーム「Javaを復習する初心者」です。JavaでCalendarクラスを使って月末を取得する2つの方法について速さを比較してみました。
+JavaでCalendarクラスを使って月末を取得する2つの方法について速さを比較してみました。
実行環境は以下の通りです。
-<ul>
- <li>DELL VOSTRO 1540
- <li>Windows 10 Pro 32bit
- <li>Intel Celelron 2.00 GHZ
- <li>メモリ 2.0GB
- <li>HDは約300GB
-</ul>
-
-どのような方法かというと次の2つです。
-<ul>
- <li>getActualMaximumメソッドを使用
- <li>翌日初日-1を設定
-</ul>
-上記をそれぞれ1000回実行して時間を比較しました。以下、ソースと結果です。
++ DELL VOSTRO 1540
++ Windows 10 Pro 32bit
++ Intel Celelron 2.00 GHZ
++ メモリ 2.0GB
++ HDは約300GB
-```Java:HelloGetActualMaximum.java
-package calendarTest;
+月末を取得する方法は以下の2つです。
-import java.util.Calendar;
++ getActualMaximumメソッドを使用
++ 翌日初日-1を設定
-public class HelloGetActualMaximum {
+#ソースと実行結果
- public static void main(String[] args) {
+上記をそれぞれ30000回実行して時間を比較しました。以下、ソースと結果です。
- int loopCount = 1000;
- long startTime, endTime;
+```Java:ソース
+package test;
- startTime = System.currentTimeMillis();
- for (int i = 0; i < loopCount; i++) {
- test1();
- }
- endTime = System.currentTimeMillis();
- System.out.println(endTime - startTime);
+import java.util.Calendar;
+import java.util.function.IntSupplier;
- startTime = System.currentTimeMillis();
- for (int i = 0; i < loopCount; i++) {
- test2();
- }
- endTime = System.currentTimeMillis();
- System.out.println(endTime - startTime);
+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();
}
- private static void test1() {
- Calendar c = Calendar.getInstance();
- c.clear();
- c.set(2016, 1, 1);
- c.getActualMaximum(Calendar.DATE);
-
-
+ // --計測--
+ public static void main(String[] args) {
+ new Test().test();
+
}
- private static void test2() {
- Calendar c = Calendar.getInstance();
- c.clear();
- c.set(2016, 2, 1);
- c.add(Calendar.DATE, -1);
- c.get(Calendar.DATE);
+ 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);
+ });
+
}
}
```
以下、実行結果です。
-```:結果
-81
-22
+```DOS:結果
+test1
+出力確認:29, 計測 286:
+test1
+出力確認:29, 計測 112:
```
getActualMaximumメソッドの方が遅いという結果が出ました。
+
+#修正履歴
+
+20161009
+
++ 文言修正。
++ ソースを修正し、java.util.functionを使用。
++ 出力結果も再実施。