加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 00:44:33 所属栏目:Java 来源:网络整理
导读:在 Java循环中,使用布尔标志而不是if语句是否更有效? 看看这两行代码. 使用标志: public boolean isSomethingForAnyone() { boolean flag = false; for (Item item : listOfItems) { flag = flag || item.isSomething(); } return flag;} 使用if语句: pub
在 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语句的主体周围添加大括号,但就是这样.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读