多个 else if 阻塞或继续? [关闭]
Posted
技术标签:
【中文标题】多个 else if 阻塞或继续? [关闭]【英文标题】:multiple else if blocks or continue? [closed] 【发布时间】:2015-02-04 12:05:35 【问题描述】:在解决一项无脑任务时,我想到了一个问题:
/**
* 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();
这两种方法的性能有区别吗?
【问题讨论】:
【参考方案1】:如果您涵盖所有情况,您可以省略最后一个条件并简单地编写:
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 是不必要的。谢谢指出!【参考方案2】:没有区别。在这种情况下,编译器应该生成完全相同的字节码。因此不会存在性能差异。
【讨论】:
这让事情变得简单。感谢您的快速响应!以上是关于多个 else if 阻塞或继续? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章