多个else if模块或者continue语句?

4

在解决一项机械任务时,我想到了一个问题:

/**
* Find element by key in binary tree.
*/
public E find(K key) {
    BinaryTreeNode<K, E> node = this.root;
    while (node != null) {
        if (node.getKey().compareTo(key) > 0) { //element in tree too big
            node = node.getLeft();
        } else if (node.getKey().compareTo(key) < 0) { //element in tree too small
            node = node.getRight();
        } else { //found element
            return node.getElement();
        }
    }
    return null;
}

while块中,只有一个if语句可以为真。因此,可以使用continue来代替else if编写while块:
while (node != null) {
    if (node.getKey().compareTo(key) > 0) { //element in tree too big
        node = node.getLeft();
        continue;
    }
    if (node.getKey().compareTo(key) < 0) { //element in tree too small
        node = node.getRight();
        continue;
    }
    //found element
    return node.getElement();
}

这两种方法的性能有什么区别吗?
2个回答

3
如果您已经涵盖了所有情况,可以省略最后一个条件并简单地编写如下内容:
else { //found element
    return node.getElement();
}

在您的第二个示例中,您可以更改为:
if (node.getKey().compareTo(key) == 0) { //found element
    return node.getElement();
}

简单来说:

return node.getElement();

这两个例子是等效的,但第一个更易于阅读。当你有以下内容时,更容易发现每个情况都被覆盖:

if ..
else if ..
else ..

当我们只有if块时。


好的,最后一个if是不必要的。谢谢指出! - Affe

2
没有区别。在这种情况下,编译器应该生成完全相同的字节码。因此不可能存在性能差异。

这样就简单了。谢谢你的快速回复! - Affe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接