黑马程序员技术交流社区

标题: java中如何能避免过长的switch-case分支语句? [打印本页]

作者: 王_涛    时间: 2012-1-13 20:25
标题: java中如何能避免过长的switch-case分支语句?
java中如何能避免过长的switch-case分支语句?
作者: 丁青松    时间: 2012-1-13 20:38
switch有它自己的应用场景,它在一定的场景比for更有效率,但是比for循环更狭隘,switch只能比较数值和字符,而for循环都可以比较,如果为了避免过长的switch-case,那得看你处于什么情况下了。。。。愚见,供参考。。。。
作者: 任奇    时间: 2012-1-14 19:36
分支很多,建议使用if-else 替代。
作者: 荣凯旋    时间: 2012-1-14 19:48
具体问题具体分析下
作者: 王杰    时间: 2012-1-16 17:53
如果太长了就用if吧
作者: 曾辉    时间: 2012-1-17 14:23
java中使用if elseif 结构不会降低效率。
如果你确实有800个的话。
有一个提高效率的方法。
就是把if分组
if(组一)
{
    if(){}...
}
else if(组二)
{
    if(){}...
}
每组对应一个类。
类中都实现do(int status)方法。
把状态的if else都放到每个类中的do方法中写。
这样代码清晰。而且由于分了组
每组100个左右,这样效率就更高了。
作者: 王家虎    时间: 2012-2-8 22:51
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个左右,这样效率就更高了。
作者: 彭沛东    时间: 2012-2-8 23:52
我觉得的话应该构建一个树,有1个根结点,10个子节点(表示0-9),每个子结点再分10个子节点,再分..最末端的节点一共构成800多个,每个都存着你需要的功能
然后 读取状态码的时候从第1位读取,按照读出的数字(0-9),分支到下一个子节点,然后读取第二个数字,再分支,一直下去..

这样的话 一个4位的状态码只用执行4次switch,每个switch中判断10个case.而switch-case只写一次,剩下就是递归..不知这样效率如何.
作者: dangfei    时间: 2012-2-21 20:44
我感觉,switch case就是为了避免写过多if   else if,非不想用switch暂时没找到好的替代品。用if代替个人感觉不可取。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2