Java程序优化之替换swtich

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

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

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

@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呢。还是举?说明吧。

@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程序性能优化》

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值