Pur*_*ari 7 java performance if-statement boolean
在Java循环中,使用boolean标志而不是if语句更有效吗?
看看这两行代码.
使用标志:
public boolean isSomethingForAnyone() {
boolean flag = false;
for (Item item : listOfItems) {
flag = flag || item.isSomething();
}
return flag;
}
Run Code Online (Sandbox Code Playgroud)
使用if声明:
public boolean isSomethingForAnyone() {
for (Item item : listOfItems) {
if (item.isSomething())
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
if如果在第一次迭代时isSomething()返回true,则使用该语句的方法当然会更快.但是,它的平均速度是否更快,或者分支是否足够慢以至于速度较慢?另外,如果循环更快,情况会有所不同吗?为了简单起见,我在这里使用了for-each循环,我认为这比使用计数器迭代数组要慢.
这两段代码并不完全相同。
即使您只根据item.isSomething()需要调用多次(与我原来的答案相反),第一个版本仍然不断尝试迭代集合的其余部分。
Item.isSomething()想象一下修改了找到该项目的集合的实现(如果它返回true)。此时,第一段代码将抛出一个ConcurrentModificationException假设它是“常规”集合的信息 - 而第二段代码将仅返回true.
从根本上来说,第二段代码更高效:它只迭代确定答案所需的列表内容,而不是遍历所有内容。性能差异很可能是无关紧要的——特别是当集合很小时——但这取决于上下文。
您发现哪个更具可读性是另一回事 - 效率可能不会很重要,尽管这取决于上下文。就我个人而言,我发现第二个版本更具可读性并且更高效,因此我总是使用它。(嗯,我会在语句主体周围添加大括号if,但仅此而已。)
| 归档时间: |
|
| 查看次数: |
198 次 |
| 最近记录: |