前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java程序优化之替换swtich

Java程序优化之替换swtich

作者头像
纪莫
发布2018-04-19 10:11:30
1.4K0
发布2018-04-19 10:11:30
举报
文章被收录于专栏:Jimoer

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

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

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

代码语言:javascript
复制
@Slf4j
public 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呢。还是举?说明吧。

代码语言:javascript
复制
@Slf4j
public 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程序性能优化》

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-04-16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档