二位数组按行按列遍历效率问题小细节

Posted 牛哄哄的柯南

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二位数组按行按列遍历效率问题小细节相关的知识,希望对你有一定的参考价值。

大家都知道二维数组可以按行遍历也可以按列遍历,但是我们在没有特殊需求的时候,基本都是通过按行遍历的,其实两种遍历方式是存在效率的的区别的,二维数组越大相差越明显。

案例代码:

package keafmd;

/**
 * Keafmd
 *
 * @ClassName: ArraryTest
 * @Description: 比较行遍历和列遍历的效率
 * @author: 牛哄哄的柯南
 * @date: 2021-12-17 14:50
 */
public class ArraryTest 
    public static void main(String[] args) 
        int x = 5000,y=6000;
        int[][] num = new int[x][y];

        //按行遍历
        long b1 = System.currentTimeMillis();
        for(int i=0;i< x;i++)
            for(int j=0;j<y;j++)
                num[i][j] = 1;
            
        
        long e1 = System.currentTimeMillis();
        System.out.println("按行遍历耗时:"+(e1-b1)+" 毫秒");


        //按列遍历
        long b2 = System.currentTimeMillis();
        for(int i=0;i< y;i++)
            for(int j=0;j<x;j++)
                num[j][i] = 1;
            
        
        long e2 = System.currentTimeMillis();
        System.out.println("按列遍历耗时:"+(e2-b2)+" 毫秒");

    

运行结果:

eg: x=5000,y=6000

按行遍历耗时:29868800 纳秒
按列遍历耗时:327224400 纳秒

eg: x=50,y=60

按行遍历耗时:68800 纳秒
按列遍历耗时:67400 纳秒

从结果可以看出,当数组比较大的时候,耗时差了10倍,可以贴切的体会到按行和按列便利的不一样了吧,造成这种结果的原因是因为CPU不是每次只读取一个元素,而是去读取一片区域的,如果数据较小,那还好,可能一次都读进缓存中了,这时按行按列读取没啥区别,可是如果二维数组很大,CPU缓存一次不能把所有行都读进去,这时按列遍历就会多次去访问内存,因此会造成遍历效率上的差异。

以上就是二位数组按行按列遍历效率问题【小细节】的全部内容

版权声明:
原创博主:牛哄哄的柯南
博主原文链接:https://keafmd.blog.csdn.net/

看完如果对你有帮助,感谢点击下面的一键三连支持!
[哈哈][抱拳]


加油!

共同努力!

Keafmd

以上是关于二位数组按行按列遍历效率问题小细节的主要内容,如果未能解决你的问题,请参考以下文章

二位数组按行按列遍历效率问题小细节

Python pandas 按行按列遍历DataFrame

R语言创建使用矩阵(按行按列填充,矩阵命名,矩阵下标使用,数据框转换为矩阵)

R语言创建使用矩阵(按行按列填充,矩阵命名,矩阵下标使用,数据框转换为矩阵)

numpy特性

ClickHouse 按列输出,而不是按行输出(实际上没有转置的转置?)