switch-case和if-else的效率比较·必看(上)

简介: switch-case和if-else的效率比较·必看(上)

绝大多数的程序员喜欢使用if判断,但是真的效率高吗?还是其它的,可能只会用if呢!我们今天就具体测一测,用事实说话,测试量100W:

理论上,switch是利用空间换时间。为了避免实验干扰,先行执行了gc()操作,后面提示了对应的内存消耗。


本文采用的是【Java】语言进行测试,后续会有【Python】【C#】


switch效率测试代码:


public static void main(String[] args) {
        /**
         * switch与if效率测试·测试次数为100W
         */
        int count=1000000;
        Random ra = new Random();
        Runtime r = Runtime.getRuntime();
        r.gc();//计算内存前先垃圾回收一次
        long start = System.currentTimeMillis();
        long startMem = r.freeMemory(); // 开始Memory
        for (int i = 0; i < count; i++) {
            int ch=ra.nextInt(10);
            switch (ch){
                case 0:break;
                case 1:break;
                case 2:break;
                case 3:break;
                case 4:break;
                case 5:break;
                case 6:break;
                case 7:break;
                case 8:break;
                case 9:break;
                default:break;
            }
        }
        long endMem =r.freeMemory(); // 末尾Memory
        long end = System.currentTimeMillis();
        System.out.println("switch判断"+count+"次用时:"+(end-start)+"毫秒");
        System.out.println("内存消耗: "+String.valueOf((startMem- endMem)/1024)+"KB");
    }


100W次swtich判断,消耗时间15ms,消耗内存1331KB


微信图片_20220112152443.png

相关文章
|
前端开发 Java
Java Process类Runtime.getRuntime().exec() 执行bat脚本程序
Java Process类Runtime.getRuntime().exec() 执行bat脚本程序
773 0
|
安全 Java 编译器
揭秘JAVA深渊:那些让你头大的最晦涩知识点,从泛型迷思到并发陷阱,你敢挑战吗?
【8月更文挑战第22天】Java中的难点常隐藏在其高级特性中,如泛型与类型擦除、并发编程中的内存可见性及指令重排,以及反射与动态代理等。这些特性虽强大却也晦涩,要求开发者深入理解JVM运作机制及计算机底层细节。例如,泛型在编译时检查类型以增强安全性,但在运行时因类型擦除而丢失类型信息,可能导致类型安全问题。并发编程中,内存可见性和指令重排对同步机制提出更高要求,不当处理会导致数据不一致。反射与动态代理虽提供运行时行为定制能力,但也增加了复杂度和性能开销。掌握这些知识需深厚的技术底蕴和实践经验。
230 2
|
3月前
|
存储 自然语言处理 算法
基于内存高效算法的 LLM Token 优化:一个有效降低 API 成本的技术方案
本文探讨了在构建对话系统时如何通过一种内存高效算法降低大语言模型(LLM)的Token消耗和运营成本。传统方法中,随着对话深度增加,Token消耗呈指数级增长,导致成本上升。
283 7
基于内存高效算法的 LLM Token 优化:一个有效降低 API 成本的技术方案
|
7月前
|
SQL 关系型数据库 MySQL
如何实现 MySQL 的读写分离?
本文介绍了 MySQL 读写分离的实现方式及其主从复制原理,解释了如何通过主从架构提升读并发能力。重点分析了主从同步延时问题及解决方案,如半同步复制、并行复制等技术手段,并结合实际案例探讨了高并发场景下的优化策略。文章还提醒开发者在编写代码时需谨慎处理插入后立即查询的情况,避免因主从延时导致的数据不一致问题。
936 44
如何实现 MySQL 的读写分离?
|
11月前
|
Java 关系型数据库 MySQL
如何使用 maven 创建一个 Spring Boot项目
Maven 是一个强大的项目管理工具,通过配置 `pom.xml` 文件自动获取所需的 jar 包,提高开发效率。其核心功能包括项目构建和依赖管理。项目构建支持编译、测试、打包和发布等流程,而依赖管理则通过中央仓库、本地仓库和私有服务器获取和管理项目依赖。示例中展示了如何创建第一个 SpringBoot 项目并实现简单接口。
282 1
如何使用 maven 创建一个 Spring Boot项目
|
10月前
昇腾910A部署Qwen2-7B教程
Qwen2-7BS适配昇腾910A教程。
|
Ubuntu Linux UED
Ubuntu 与 Mint:全面比较
【8月更文挑战第21天】
2019 0
Ubuntu 与 Mint:全面比较
|
机器学习/深度学习 人工智能 数据可视化
多模态数据的应用痛点
【2月更文挑战第22天】多模态数据的应用痛点
635 1
多模态数据的应用痛点
|
机器学习/深度学习 并行计算 算法
粒子群优化算法详细讲解(附完整代码实现一元二次方程求解)
粒子群优化算法详细讲解(附完整代码实现一元二次方程求解)
|
算法 图形学 C++
复杂多边形的三角剖分
复杂多边形的三角剖分
282 0