(1)
     while(rs.next()) {
        
         if (flag == 1) {
             ......
         } else {
             ......
         }      }
 (2)
    if (flag == 1) {
        while(rs.next()) {
            ......
        }
    } else {
        while(rs.next()) {
            ......(两个分支while里的处理逻辑不同)
        }
 
    }从效率的角度上来讲,不用说,肯定是第二种更高效,因为少了每一次循环的判断,但是具体能影响多少呢?写代码的过程中,哪种方式用的多呢?有哪位大虾 砖家 能给解个惑?

解决方案 »

  1.   

    相差的效率微乎其微,基本上不值得这么做,更何况你还是一个面向ResultSet的循环操作,代码还是尽量符合常规逻辑思维才便于后期的维护工作。对计算极度敏感的程序,往往从架构或设计上进行优化来提升处理能力。
      

  2.   

    看逻辑吧,看你的flag是针对于ResultSet里面的每个对象还是针对整个ResultSet对象的逻辑控制
      

  3.   


    那您是说哪种比较符合常规逻辑呢?
    首先声明这里ResultSet会重新获取一遍
      

  4.   


    你说的“首先声明这里ResultSet会重新获取一遍”是指啥意思?没看出来你两种写法,有其中一种会导致“ResultSet会重新获取一遍”啊?常规逻辑的意思是:一般而言,对一个ResultSet的操作,往往可能存在多次的if条件处理,实际上即便你现在不会这么做也难以保证以后随着需求的变化,需要增加其它的if条件处理。如果一开始采用模式2,就可能导致一年后另一个运维人员修改你代码以适应需求变化的时候,不得不将其重新修改为模式1。当然,如果你非常肯定、确定以及一定的说,这个程序这辈子只会有这一个if条件了,那么采用模式2也无可厚非。所以我之前说是为了便于后期维护的常规逻辑。
      

  5.   


    那里的SQL会重新执行一遍的,所以ResultSet会重新获取一遍。
    不过我觉得你说得挺有道理的,如果站在扩展的角度上来讲,的确把flag的判断放里面比较好,虽然是全局的flag,需要每次都重复判断一下,但是如果再增加一个flag,和这个flag处理的都是这个结果集中的数据,但是处理逻辑不同,显然是放在里面更好,只需要跟在后面判断一下就行了,如果要是放外面,就又要把结果集获取一遍,这样的话如果需要经过两个flag处理的数据就不能同时处理了,所以看来有时候不能盲目的寻求程序的最简化(在性能上影响不是很大的情况下)。
      

  6.   


    你的else操作  还是要循环
    循环是避免不了的,两种效率都一样  不需要else操作的话   第二种效率比较高