java - 水平或垂直循环二维数组的效率

标签 java multidimensional-array

我在 stackoverflow 上看了一篇 4 年前的文章,见这里: Fastest way to loop through a 2d array? 几乎每个答案都同意水平扫描会更快。我写了一个简短的 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 需要很多预热时间...更好的测试设置可能是有两个独立的程序,并在花时间之前进行一些预热循环...

关于java - 水平或垂直循环二维数组的效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20155087/

相关文章:

java - 实体没有定义主键属性 : JPA

java - 线程安全链表交替使用

java - ETL对于各种算法处理的局限性

php - 如果只有 1 个键,则从多维数组中删除数组

arrays - 将一维字符串转换为多维数组 - Numpy

java交换混合和最大数组越界

java - 30-100GB 大堆的高效 GC 收集

java - 在 2v2 游戏中切换回合

python - 搜索多维数组

C 编程二维数组问题