gpt4 book ai didi

java - 使用标志或 if 子句效率更高吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:30:24 26 4
gpt4 key购买 nike

在 Java 循环中,使用 boolean 标志而不是 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 语句的主体周围添加大括号,但仅此而已。)

关于java - 使用标志或 if 子句效率更高吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19186634/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com