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

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

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


案例代码:


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


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

相关文章
|
消息中间件 Java 中间件
秒懂消息队列MQ,万字总结带你全面了解消息队列MQ
消息队列是大型分布式系统不可缺少的中间件,也是高并发系统的基石中间件,所以掌握好消息队列MQ就变得极其重要。接下来我就将从零开始介绍什么是消息队列?消息队列的应用场景?如何进行选型?如何在Spring Boot项目中整合集成消息队列。
25330 10
秒懂消息队列MQ,万字总结带你全面了解消息队列MQ
|
存储 算法 NoSQL
还分不清 Cookie、Session、Token、JWT?看这一篇就够了
Cookie、Session、Token 和 JWT(JSON Web Token)都是用于在网络应用中进行身份验证和状态管理的机制。虽然它们有一些相似之处,但在实际应用中有着不同的作用和特点,接下来就让我们一起看看吧,本文转载至http://juejin.im/post/5e055d9ef265da33997a42cc
48581 13
|
传感器 监控 Java
如何正确理解 CPU 使用率和平均负载的关系?看完你就知道了
CPU(Central Processing Unit)是计算机系统的运算和控制核心,是信息处理、程序运行的最终执行单元,相当于系统的“大脑”。
4170 0
如何正确理解 CPU 使用率和平均负载的关系?看完你就知道了
|
设计模式 安全 Java
单例模式:饿汉模式、懒汉模式
单例模式:饿汉模式、懒汉模式
357 0
|
SQL 算法 关系型数据库
MySQL InnoDB中的锁-自增锁(AUTO-INC Locks)
MySQL InnoDB 锁 自增锁AUTO-INC Locks
2610 0
|
存储 NoSQL 算法
阿里面试:亿级 redis 排行榜,如何设计?
本文由40岁老架构师尼恩撰写,针对近期读者在一线互联网企业面试中遇到的高频面试题进行系统化梳理,如使用ZSET排序统计、亿级用户排行榜设计等。文章详细介绍了Redis的四大统计(基数统计、二值统计、排序统计、聚合统计)原理和应用场景,重点讲解了Redis有序集合(Sorted Set)的使用方法和命令,以及如何设计社交点赞系统和游戏玩家排行榜。此外,还探讨了超高并发下Redis热key分治原理、亿级用户排行榜的范围分片设计、Redis Cluster集群持久化方式等内容。文章最后提供了大量面试真题和解决方案,帮助读者提升技术实力,顺利通过面试。
|
NoSQL Java API
分布式锁的实现原理与应用场景,5 分钟彻底搞懂!
本文详细解析了分布式锁的实现原理与应用场景,包括线程锁、进程锁和分布式锁的区别,以及分布式锁的四种要求和三种实现方式(数据库乐观锁、ZooKeeper、Redis)。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
分布式锁的实现原理与应用场景,5 分钟彻底搞懂!
|
10月前
|
机器学习/深度学习 计算机视觉 知识图谱
RT-DETR改进策略【Conv和Transformer】| 上下文转换器CoT 结合静态和动态上下文信息的注意力机制 (含二次创新)
RT-DETR改进策略【Conv和Transformer】| 上下文转换器CoT 结合静态和动态上下文信息的注意力机制 (含二次创新)
277 11
RT-DETR改进策略【Conv和Transformer】| 上下文转换器CoT 结合静态和动态上下文信息的注意力机制 (含二次创新)
|
存储 安全 算法
SSL和TLS部署实践
【10月更文挑战第28天】在TLS中,服务器的加密身份和强大私钥是安全基础,2048位RSA密钥足以满足大多数需求。保护私钥需在可信环境生成、加密存储、使用HSM、及时撤销旧证书、每年更新证书。确保证书覆盖所有域名,选择可靠CA,使用SHA256签名算法,配置完整证书链,禁用不安全加密套件,启用前向保密,使用会话重用机制,启用OCSP Stapling,加密整个网站,删除混合内容,安全设置Cookie,配置HSTS和CSP。
902 1
|
Java
【编程基础知识】switch case可以用string(千万注意要加上break)
本文详细探讨了Java中`switch`语句使用字符串时的注意事项,重点讲解了`break`语句的重要性。通过代码示例和流程图,帮助读者正确理解和使用`switch`语句,避免常见的编程错误。
738 4