Рубрики
Без рубрики

Java – Обратный цикл по сравнению с прямым циклом в производительности

– 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. Прямой цикл по сравнению с обратным циклом

package com.mkyong.benchmark.bk;

import java.util.Arrays;
import java.util.Date;
import java.util.List;

public class LoopForwardReverseTest {

    private static List 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 -------

Forward Loop - Elapsed time in milliseconds: 64

--------- Reverse Loop -------

Reverse Loop - Elapsed time in milliseconds: 49

Рекомендации

  1. JMH – Прямой цикл Java против обратного цикла

Оригинал: “https://mkyong.com/java/reverse-loop-versus-forward-loop-in-performance-java/”