多个 else if 块或继续?
multiple else if blocks or 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();
}
这两种方法在性能上有什么区别吗?
没有区别。在这种情况下,编译器应该生成完全相同的字节码。因此不存在性能差异。
如果你涵盖所有情况,你可以省略最后一个条件并简单地写:
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
个方块时。
在解决一个没脑子的任务时,我想到了一个问题:
/**
* 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();
}
这两种方法在性能上有什么区别吗?
没有区别。在这种情况下,编译器应该生成完全相同的字节码。因此不存在性能差异。
如果你涵盖所有情况,你可以省略最后一个条件并简单地写:
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
个方块时。