当if while 嵌套时的一个很纠结的问题

GeekQing 2012-01-04 06:00:51
(1)
while(rs.next()) {

if (flag == 1) {
......
} else {
......
}

}


(2)
if (flag == 1) {
while(rs.next()) {
......
}
} else {
while(rs.next()) {
......(两个分支while里的处理逻辑不同)
}

}

从效率的角度上来讲,不用说,肯定是第二种更高效,因为少了每一次循环的判断,但是具体能影响多少呢?写代码的过程中,哪种方式用的多呢?有哪位大虾 砖家 能给解个惑?
...全文
577 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
梦未央 2012-01-10
  • 打赏
  • 举报
回复
第二种效率比较高

crfchina 2012-01-09
  • 打赏
  • 举报
回复

你的else操作 还是要循环
循环是避免不了的,两种效率都一样

不需要else操作的话 第二种效率比较高


0xfather 2012-01-09
  • 打赏
  • 举报
回复
一般还是第一种多吧
GeekQing 2012-01-07
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ldh911 的回复:]
引用 5 楼 zhuxiaqing 的回复:
那您是说哪种比较符合常规逻辑呢?
首先声明这里ResultSet会重新获取一遍


你说的“首先声明这里ResultSet会重新获取一遍”是指啥意思?没看出来你两种写法,有其中一种会导致“ResultSet会重新获取一遍”啊?

常规逻辑的意思是:一般而言,对一个ResultSet的操作,往往可能存在多次的if条件处理,实际上即便你现在不……
[/Quote]

那里的SQL会重新执行一遍的,所以ResultSet会重新获取一遍。
不过我觉得你说得挺有道理的,如果站在扩展的角度上来讲,的确把flag的判断放里面比较好,虽然是全局的flag,需要每次都重复判断一下,但是如果再增加一个flag,和这个flag处理的都是这个结果集中的数据,但是处理逻辑不同,显然是放在里面更好,只需要跟在后面判断一下就行了,如果要是放外面,就又要把结果集获取一遍,这样的话如果需要经过两个flag处理的数据就不能同时处理了,所以看来有时候不能盲目的寻求程序的最简化(在性能上影响不是很大的情况下)。
杀猪剑客 2012-01-06
  • 打赏
  • 举报
回复
+1
[Quote=引用 6 楼 ldh911 的回复:]
引用 5 楼 zhuxiaqing 的回复:
那您是说哪种比较符合常规逻辑呢?
首先声明这里ResultSet会重新获取一遍


你说的“首先声明这里ResultSet会重新获取一遍”是指啥意思?没看出来你两种写法,有其中一种会导致“ResultSet会重新获取一遍”啊?

常规逻辑的意思是:一般而言,对一个ResultSet的操作,往往可能存在多次的if条件处理,实际上即便你现在不……
[/Quote]
sanshiqingnian 2012-01-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 snowday88 的回复:]
+1

引用 6 楼 ldh911 的回复:
引用 5 楼 zhuxiaqing 的回复:
那您是说哪种比较符合常规逻辑呢?
首先声明这里ResultSet会重新获取一遍


你说的“首先声明这里ResultSet会重新获取一遍”是指啥意思?没看出来你两种写法,有其中一种会导致“ResultSet会重新获取一遍”啊?

常规逻辑的意思是:一般而言,对一个ResultSet的操作……
[/Quote]
+2
MiceRice 2012-01-05
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhuxiaqing 的回复:]
那您是说哪种比较符合常规逻辑呢?
首先声明这里ResultSet会重新获取一遍
[/Quote]

你说的“首先声明这里ResultSet会重新获取一遍”是指啥意思?没看出来你两种写法,有其中一种会导致“ResultSet会重新获取一遍”啊?

常规逻辑的意思是:一般而言,对一个ResultSet的操作,往往可能存在多次的if条件处理,实际上即便你现在不会这么做也难以保证以后随着需求的变化,需要增加其它的if条件处理。如果一开始采用模式2,就可能导致一年后另一个运维人员修改你代码以适应需求变化的时候,不得不将其重新修改为模式1。

当然,如果你非常肯定、确定以及一定的说,这个程序这辈子只会有这一个if条件了,那么采用模式2也无可厚非。所以我之前说是为了便于后期维护的常规逻辑。
GeekQing 2012-01-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ldh911 的回复:]

相差的效率微乎其微,基本上不值得这么做,更何况你还是一个面向ResultSet的循环操作,代码还是尽量符合常规逻辑思维才便于后期的维护工作。

对计算极度敏感的程序,往往从架构或设计上进行优化来提升处理能力。
[/Quote]

那您是说哪种比较符合常规逻辑呢?
首先声明这里ResultSet会重新获取一遍
GeekQing 2012-01-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 abstruct 的回复:]

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

这个显然是全局的flag
安特矮油 2012-01-05
  • 打赏
  • 举报
回复
看逻辑吧,看你的flag是针对于ResultSet里面的每个对象还是针对整个ResultSet对象的逻辑控制
XC2010_K 2012-01-05
  • 打赏
  • 举报
回复
果断第二种。别小看细节。
MiceRice 2012-01-04
  • 打赏
  • 举报
回复
相差的效率微乎其微,基本上不值得这么做,更何况你还是一个面向ResultSet的循环操作,代码还是尽量符合常规逻辑思维才便于后期的维护工作。

对计算极度敏感的程序,往往从架构或设计上进行优化来提升处理能力。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧