java – 使用flag或if子句更有效吗?

前端之家收集整理的这篇文章主要介绍了java – 使用flag或if子句更有效吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Java循环中,使用布尔标志而不是if语句是否更有效?

看看这两行代码.

使用标志:

public boolean isSomethingForAnyone() {
    boolean flag = false;
    for (Item item : listOfItems) {
        flag = flag || item.isSomething();
    }
    return flag;
}

使用if语句:

public boolean isSomethingForAnyone() {
    for (Item item : listOfItems) {
        if (item.isSomething())
            return true;
    }
    return false;
}

如果isSomething()在第一次迭代时返回true,则使用if语句的方法当然会更快.但是,它的平均速度是否更快,或者分支是否足够慢以至于速度较慢?另外,如果循环更快,情况会有所不同吗?为了简单起见,我在这里使用了for-each循环,我认为这比使用计数器迭代数组要慢.

解决方法

这两段代码并不完全相同.

即使您只需要多次调用item.isSomething()(与我原来的答案相反),第一个版本仍然会继续尝试迭代集合的其余部分.

想象一下Item.isSomething()的一个实现,它修改了找到该项的集合(如果它返回true).此时,第一段代码将抛出一个ConcurrentModificationException,假设它是一个“常规”集合 – 而第二段代码将返回true.

从根本上说,第二段代码更有效:它只迭代确定答案所需的列表,而不是通过所有内容.很可能是性能不同是无关紧要的 – 特别是如果集合很小 – 但这取决于上下文.

您发现更具可读性的是另一个问题 – 效率可能不会很大,尽管这取决于上下文.就个人而言,我发现第二个版本更具可读性和更高效,所以我总是使用它. (好吧,我会在if语句的主体周围添加大括号,但就是这样.)

原文链接:https://www.f2er.com/java/129624.html

猜你在找的Java相关文章