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

简介: 二位数组按行按列遍历效率问题【小细节】

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


案例代码:


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缓存一次不能把所有行都读进去,这时按列遍历就会多次去访问内存,因此会造成遍历效率上的差异。


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

相关文章
|
算法 容器
算法:双指针解决数组划分和数组分块问题
算法:双指针解决数组划分和数组分块问题
|
9月前
|
算法 测试技术 C#
二分查找:LeetCode2035:将数组分成两个数组并最小化数组和的差
二分查找:LeetCode2035:将数组分成两个数组并最小化数组和的差
|
5月前
|
C语言 Python
有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
341 4
|
9月前
|
机器学习/深度学习 算法 测试技术
【组合数学 容斥原理 逆向思考】2930. 重新排列后包含指定子字符串的字符串数目
【组合数学 容斥原理 逆向思考】2930. 重新排列后包含指定子字符串的字符串数目
|
8月前
|
存储 算法
数据结构和算法学习记录——删除有序数组中的重复项、合并两个有序数组
数据结构和算法学习记录——删除有序数组中的重复项、合并两个有序数组
37 0
数据结构和算法学习记录——删除有序数组中的重复项、合并两个有序数组
|
9月前
58.有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中
58.有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中
45 0
|
9月前
【每日一题Day207】LC1072按列翻转得到最大值等行数 | 逆向思维+哈希表+位运算
【每日一题Day207】LC1072按列翻转得到最大值等行数 | 逆向思维+哈希表+位运算
43 0
|
9月前
|
算法 程序员 测试技术
【算法训练-数组 四】【数组合并】:合并两个有序数组
【算法训练-数组 四】【数组合并】:合并两个有序数组
64 0
|
9月前
|
人工智能 算法 数据可视化
【算法训练-数组 五】【数组组合】:下一个排列
【算法训练-数组 五】【数组组合】:下一个排列
60 0
|
索引
labview数组数据一维数组二维数组索引行列元素替换子数组排序
labview数组数据一维数组二维数组索引行列元素替换子数组排序
300 0