Подтвердить что ты не робот

Сравнивая логически похожие "для циклов",

Я столкнулся с простой java-программой с двумя циклами. Вопрос состоял в том, будут ли эти циклы для выполнения одинакового времени выполнять или сначала будут выполняться быстрее второго.

Ниже представлены программы:

public static void main(String[] args) {

        Long t1 = System.currentTimeMillis();
        for (int i = 999; i > 0; i--) {
            System.out.println(i);
        }
        t1 = System.currentTimeMillis() - t1;
        Long t2 = System.currentTimeMillis();
        for (int j = 0; j < 999; j++) {
            System.out.println(j);
        }
        t2 = System.currentTimeMillis() - t2;

        System.out.println("for loop1 time : " + t1);
        System.out.println("for loop2 time : " + t2);
    }

После выполнения этого я обнаружил, что первый цикл цикла занимает больше времени, чем второй. Но после замены места, результат был таким же, что и для цикла, написанного первым, всегда занимает больше времени, чем другое. Я был очень удивлен результатом. Пожалуйста, кто-нибудь скажет мне, как работает программа.

4b9b3361

Ответ 1

Время, пройденное в любом цикле, будет зависеть от ввода/вывода (то есть печати на экране), что сильно варьируется. Я не думаю, что вы можете многому научиться из своего примера.

Ответ 2

Первый цикл будет выделять 1000 строк в памяти, а второй цикл, независимо от того, работает он или нет, может использовать уже предварительно выделенные объекты.

Несмотря на то, что при работе с System.out.println любое распределение должно быть небрежным в сравнении.

Ответ 4

Я думаю, если вы собираетесь сделать настоящий тест, вы должны запустить их в разных потоках и использовать более высокое значение (не только 1000), ни IO (вывод печати во время выполнения), а не выполнять их последовательно, но один за другим. У меня есть опыт, выполняющий один и тот же код, несколько раз может занять другое время выполнения. и, на мой взгляд, оба теста не будут отличаться.