多个 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 阻塞或继续? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在多个任务之后继续而不阻塞 UI 线程?

Golang并发模型:select进阶

说说下面几个概念:同步,异步,阻塞,非阻塞?

golang函数 和 条件语句

go 利用chan的阻塞机制,实现协程的开始阻塞返回控制器

ByteBuffer.getInt() 是不是阻塞? [关闭]