微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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.jb51.cc/java/129624.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐