2015-02-04 1 views
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 문은 사실이 될 수 있습니다. 그래서 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

그건 쉽습니다. 빠른 응답 주셔서 감사합니다! – Affe

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 블록이있을 때.

+0

맞습니다. 마지막은 불필요합니다. 지적 해 주셔서 감사합니다! – Affe