博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java程序优化之替换swtich
阅读量:5073 次
发布时间:2019-06-12

本文共 1896 字,大约阅读时间需要 6 分钟。

关键字switch语句用于多条件判断,功能类似于if-else语句,两者性能也差不多,不能说switch会降低系统性能。在绝大部门情况下,switch语句还是有性能提升空间的。

但是在项目代码中,如果switch的case很多,然后代码也就多了,感觉和if-else差不多呢,总在想有什么更好的办法吗?能不能替换掉这么多的条件判断呢?

答案是有的。举个?来说明,先来个正常的switch使用方式,直接上代码。

@Slf4jpublic class TestSwitch {    int resutl = 0;    @Test    public void testDefautl()    {        Long start = System.currentTimeMillis();        for(int i=0;i<10000000;i++)        {            //调用包含switch语句的函数            resutl = switchInt(i);        }        log.info("耗时:{}",System.currentTimeMillis()-start);    }    /**     * 根据操作数不同,返回不同的值     * @param arg 参数     * @return      */    protected int switchInt(int arg)    {        int index = arg%10+1;        switch (index)        {            case 1: return 3;            case 2: return 6;            case 3: return 7;            case 4: return 8;            case 5: return 10;            case 6: return 16;            case 7: return 18;            case 8: return 44;            default: return -1;        }    }}

打印结果,耗时:77

这是对一个switch操作进行了若干次循环。为了使测试用例更加接近于现实情况,每次都使用不同索引的操作数i去测试switch的性能。就分支逻辑而言,这种switch模式的性能并不差。但是如果换一种全新的思路去替代switch呢。还是举?说明吧。

@Slf4jpublic class TestSwitch {    int resutl = 0;    int[] sw = new int[]{3,6,7,8,10,16,18,44};    @Test    public void testDefautl()    {        Long start = System.currentTimeMillis();        for(int i=0;i<10000000;i++)        {            resutl = arrayInt(sw,i);        }        log.info("耗时:{}",System.currentTimeMillis()-start);    }    /**     * 使用数组替换switch     * @param sw 数组     * @param arg     * @return     */    protected int arrayInt(int[] sw,int arg)    {        int index = arg%10+1;        if(index>7 || index<1)        {            return -1;        }else        {            return sw[index];        }    }}

打印结果,耗时:59

这个思路,使用一个连续的数组代替了switch语句。因为按索引在数组中访问数据是非常快的,至少好于switch的分支判断,因此他的速度会快于原来的实现。

参考

《Java程序性能优化》

转载于:https://www.cnblogs.com/jimoer/p/8849762.html

你可能感兴趣的文章
SelectSort 选择排序
查看>>
关于android 加载https网页的问题
查看>>
BZOJ 1047 HAOI2007 理想的正方形 单调队列
查看>>
各种语言推断是否是手机设备
查看>>
这个看起来有点简单!--------实验吧
查看>>
小知识:js如何更改css样式
查看>>
PHP count down
查看>>
JVM参数调优:Eclipse启动实践
查看>>
(旧笔记搬家)struts.xml中单独页面跳转的配置
查看>>
不定期周末福利:数据结构与算法学习书单
查看>>
strlen函数
查看>>
Java中的String,StringBuilder,StringBuffer三者的区别
查看>>
Python爬虫
查看>>
轻量级Mysql Sharding中间件——Shark
查看>>
python的列表与shell的数组
查看>>
关于TFS2010使用常见问题
查看>>
软件工程团队作业3
查看>>
python标准库——queue模块 的queue类(单向队列)
查看>>
火狐、谷歌、IE关于document.body.scrollTop和document.documentElement.scrollTop 以及值为0的问题...
查看>>
一网打尽各类Java基本数据类型转换
查看>>