Java – While vs For vs Iterator性能测试

节点
本文使用endTime - startTime方法来测量循环的性能,它忽略了JVM预热优化,其结果可能不一致或准确。

更好的方法是使用OpenJDK JMH框架进行基准测试,因为它将自动处理JVM的预热问题,请参见此示例– Java JMH基准教程

一个简单的Java代码来测试以下循环方法的性能:

  1. While循环
  2. 对于循环
  3. 迭代器循环

在Java中,只需比较endTime和startTime即可获得函数的经过时间。

long startTime = new Date().getTime();
	// call something else
	long endTime = new Date().getTime();
	long difference = endTime - startTime;
	System.out.println("Elapsed time in milliseconds: " + difference);

While vs For vs迭代器

循环包含1、5、10和1500万条记录的List Java代码。

LoopSimpleTest.java
package com.mkyong.benchmark.bk;

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

public class LoopSimpleTest {

    private static List<String> DATA_FOR_TESTING = Arrays.asList(createArray());

    public static void main(String[] argv) {

        LoopSimpleTest obj = new LoopSimpleTest();

        obj.loopIterator();
        obj.loopFor();
        obj.loopWhile();

    }

    public void loopFor() {
        System.out.println("\n--------- For Loop -------\n");
        long startTime = new Date().getTime();

        for (int i = 0; i < DATA_FOR_TESTING.size(); i++) {
            String s = DATA_FOR_TESTING.get(i);
        }

        long endTime = new Date().getTime();
        long difference = endTime - startTime;
        System.out.println("For - Elapsed time in milliseconds: " + difference);
    }

    public void loopWhile() {
        System.out.println("\n--------- While Loop -------\n");
        long startTime = new Date().getTime();

        int i = 0;
        while (i < DATA_FOR_TESTING.size()) {
            String s = DATA_FOR_TESTING.get(i);
            i++;
        }

        long endTime = new Date().getTime();
        long difference = endTime - startTime;
        System.out.println("While - Elapsed time in milliseconds: " + difference);
    }

    public void loopIterator() {
        System.out.println("\n--------- Iterator Loop -------\n");
        long startTime = new Date().getTime();

        Iterator<String> iterator = DATA_FOR_TESTING.iterator();
        while (iterator.hasNext()) {
            String next = iterator.next();
        }

        long endTime = new Date().getTime();
        long difference = endTime - startTime;
        System.out.println("Iterator - Elapsed time in milliseconds: " + difference);
    }

    private static String[] createArray() {
        String sArray[] = new String[15_000_000];
        for (int i = 0; i < 15_000_000; i++) {
            sArray[i] = "Array " + i;
        }
        return sArray;
    }

}

输出量

D:\test>java -Xms1024m -Xmx1024m ArrayToList

--------- Iterator Loop -------

Iterator - Elapsed time in milliseconds: 390


--------- For Loop --------

For - Elapsed time in milliseconds: 234


--------- While Loop -------

While - Elapsed time in milliseconds: 234

迭代器循环最慢,并且for循环和while循环之间的差异并不明显。

参考文献

  1. Java JMH基准教程

翻译自: https://mkyong.com/java/while-loop-for-loop-and-iterator-performance-test-java/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值