如果阻止或继续多个其他?

时间:2015-02-04 12:05:36

标签: java if-statement continue

在解决无意识的任务时,我想到了一个问题:

/**
* 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语句可以为真。因此while块可以使用continue代替else if来编写:

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 个答案:

答案 0 :(得分: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块。

答案 1 :(得分:2)

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