繁体   English   中英

水平或垂直穿过二维数组的循环效率

[英]efficiency of loop through a 2d array horizontally or vertically

我读了4年前在stackoverflow上发表的一篇文章,请参见此处: 循环遍历2d数组的最快方法? 几乎每个答案都同意横向扫描会更快。 我写了一个简短的Java程序来检查这一点,事实并非如此。 我选择400x400矩阵。 水平扫描的时间为6,垂直扫描的时间为3。我检查了其他尺寸的矩阵。 事实证明,垂直扫描速度更快。 我会错过某些事情吗?

public class Test {

public static void main(String[] args) {

        int row=Integer.parseInt(args[0]);
    int column=Integer.parseInt(args[1]);
    int[][] bigarray=new int[row][column];

    long startTime = System.currentTimeMillis();
    for(int i=0;i<row;i++)
        for(int j=0;j<column;j++)
            bigarray[i][j]=Math.abs(i-j)-Math.abs(i-j);


    long endTime   = System.currentTimeMillis();
    long totalTime = endTime - startTime;
    System.out.println("scan horizentally time is: ");
    System.out.println(totalTime);

    int[][] bigarray1=new int[row][column];

    long startTime1 = System.currentTimeMillis();
    for(int j=0;j<column;j++)
        for(int i=0;i<row;i++)
            bigarray1[i][j]=Math.abs(i-j)-Math.abs(i-j);


    long endTime1   = System.currentTimeMillis();
    long totalTime1 = endTime1 - startTime1;
    System.out.println("scan vertically time is: ");
    System.out.println(totalTime1);

}

}

对于水平版本,您可以优化代码:

for(int i=0;i<row;i++)
    int[] rowArray = bigarray[i];
    for(int j=0;j<column;j++)
        rowArray[j]=Math.abs(i-j)-Math.abs(i-j);

如果您的测试设置第一次测试总是比较慢,我不会感到惊讶。 Java需要大量的预热时间...更好的测试设置可能是拥有两个单独的程序,并在花费时间之前进行一些预热循环...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM