Java – パフォーマンスのフォワードループに対するリバースループ
より良い方法は、OpenJDK JMHフレームワークを使用してベンチマークテストを行うことです.JVMのウォームアップの懸念が自動的に処理されるからです。この例を参照してください –
JMH – フォワードループとリバースループ
フォワードループとリストの逆ループのJavaパフォーマンステストはどちらが速いのですか?
前方ループ
for (int i = 0; i < aList.size(); i++) { String s = aList.get(i); }
逆ループ
for (int i = aList.size() - 1; i >= 0; i--) { String s = aList.get(i); }
1.フォワードループとリバースループ
LoopForwardReverseTest.java
package com.mkyong.benchmark.bk; import java.util.Arrays; import java.util.Date; import java.util.List; public class LoopForwardReverseTest { private static List<String> DATA__FOR__TESTING = Arrays.asList(createArray()); public static void main(String[]argv) { LoopForwardReverseTest obj = new LoopForwardReverseTest(); obj.forwardLoop(); obj.reverseLoop(); } public void forwardLoop() { System.out.println("\n--------- Forward Loop -------\n"); long startTime = new Date().getTime(); for (int i = 0; i < DATA__FOR__TESTING.size(); i++) { String s = DATA__FOR__TESTING.get(i); //System.out.println(s); } long endTime = new Date().getTime(); long difference = endTime - startTime; System.out.println("Forward Loop - Elapsed time in milliseconds: " + difference); } public void reverseLoop() { System.out.println("\n--------- Reverse Loop -------\n"); long startTime = new Date().getTime(); for (int i = DATA__FOR__TESTING.size() - 1; i >= 0; i--) { String s = DATA__FOR__TESTING.get(i); //System.out.println(s); } long endTime = new Date().getTime(); long difference = endTime - startTime; System.out.println("Reverse Loop - Elapsed time in milliseconds: " + difference); } private static String[]createArray() { int N = 10__000__000; String sArray[]= new String[N]; for (int i = 0; i < N; i++) { sArray[i]= "Array " + i; } return sArray; } }
結果
--------- Forward Loop ------- フォワードループ - 経過時間(ミリ秒):64 --------- Reverse Loop ------- Reverse Loop - Elapsed time in milliseconds: 49