A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

java中如何能避免过长的switch-case分支语句?

8 个回复

正序浏览
我感觉,switch case就是为了避免写过多if   else if,非不想用switch暂时没找到好的替代品。用if代替个人感觉不可取。
回复 使用道具 举报
我觉得的话应该构建一个树,有1个根结点,10个子节点(表示0-9),每个子结点再分10个子节点,再分..最末端的节点一共构成800多个,每个都存着你需要的功能
然后 读取状态码的时候从第1位读取,按照读出的数字(0-9),分支到下一个子节点,然后读取第二个数字,再分支,一直下去..

这样的话 一个4位的状态码只用执行4次switch,每个switch中判断10个case.而switch-case只写一次,剩下就是递归..不知这样效率如何.
回复 使用道具 举报
java中使用if elseif 结构不会降低效率。
sun官方说明,java中的if是经过效率优化的。
反射的效率是if语句的1/10。(就是说反射是很慢的)
之前做电信项目的时候我就遇到过。

使用if语句几百个分支的效率是每秒几万次。效率非常高。
(当然if中是有逻辑的。)


如果你确实有800个的话。
有一个提高效率的方法。
就是把if分组
if(组一)
{
    if(){}...
}
else if(组二)
{
    if(){}...
}
每组对应一个类。
类中都实现do(int status)方法。
把状态的if else都放到每个类中的do方法中写。
这样代码清晰。而且由于分了组
每组100个左右,这样效率就更高了。

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

回复 使用道具 举报
java中使用if elseif 结构不会降低效率。
如果你确实有800个的话。
有一个提高效率的方法。
就是把if分组
if(组一)
{
    if(){}...
}
else if(组二)
{
    if(){}...
}
每组对应一个类。
类中都实现do(int status)方法。
把状态的if else都放到每个类中的do方法中写。
这样代码清晰。而且由于分了组
每组100个左右,这样效率就更高了。

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

回复 使用道具 举报
如果太长了就用if吧
回复 使用道具 举报
具体问题具体分析下
回复 使用道具 举报
分支很多,建议使用if-else 替代。

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

回复 使用道具 举报
switch有它自己的应用场景,它在一定的场景比for更有效率,但是比for循环更狭隘,switch只能比较数值和字符,而for循环都可以比较,如果为了避免过长的switch-case,那得看你处于什么情况下了。。。。愚见,供参考。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马