질문은 if
진술의 비용과 비교하여 for
과 while
루프의 비용을 비교할 것을 요구합니다.for 및 while 루프는 얼마나 비쌉니까?
if 문의 상대 비용이 1 인 경우 for 및 while 루프의 상대 비용은 얼마입니까?
비교할 때 하나의 부울 값이 while
루프와 if
문으로 전달되고 while
이 X 회 반복 될 수 있다고 가정합니다. for
도 X 번 반복한다고 가정합니다. 성능면에서
질문은 if
진술의 비용과 비교하여 for
과 while
루프의 비용을 비교할 것을 요구합니다.for 및 while 루프는 얼마나 비쌉니까?
if 문의 상대 비용이 1 인 경우 for 및 while 루프의 상대 비용은 얼마입니까?
비교할 때 하나의 부울 값이 while
루프와 if
문으로 전달되고 while
이 X 회 반복 될 수 있다고 가정합니다. for
도 X 번 반복한다고 가정합니다. 성능면에서
는 if
문은 통상 n은 그것을 따라 얻어 루프의 양 조건이 무엇인지에 O for
및 while
루프로 보통 (N) O를 (1) 복잡성의이다. 예 :
for (int i = 0; i < 100; i++)
{
// Some statements
}
100 회 반복되므로 O (100)가됩니다. 초기 루프 내부에 추가 루프가없는 경우 for
루프 내에서 얼마나 많은 명령문이 인지는 중요하지 않습니다. 그렇다면 O (n^2) 복잡도에 이르게됩니다. 이는 2 차적이므로 매우 비효율적입니다.
그러나이 두려움은 두려워하지 마십시오. 루프는 이유 때문에 존재하며, 많은 프로그램에서 루프가 필요합니다.
루프는 언어 구문입니다. 루프 for
과 동일한 작업을 수행하려면 while
루프를 쓰고 그 반대의 경우도 마찬가지입니다.
if 문의 상대 비용이 1 인 경우 for 및 while 루프의 상대 비용은 얼마입니까?
for
루프 및 while
루프도 조건을 검사합니다. 그런 의미에서 그들은 또한 1
의 비용을 가지고 있습니다. 요점은 일반적으로 그 조건에 영향을 줄 루프에있는 것이 있다는 것입니다.
// start for
0: iconst_0
1: istore_1
2: iload_1
3: bipush 10
5: if_icmpge 14
8: iinc 1, 1
11: goto 2
// end for
14: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
17: ldc #3 // String
19: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
// start while
22: iconst_0
23: istore_1
24: iload_1
25: bipush 10
27: if_icmpge 36
30: iinc 1, 1
33: goto 24
36: return
// end while
당신이 두 루프가 똑같은 일을 발견하고 동일한 바이트 코드를 생성 할 수 있습니다
public static void main(String[] args) throws Exception {
for (int i = 0; i < 10; i++) {
}
System.out.println("");
int i = 0;
while (i < 10) {
i++;
}
}
이 코드를 고려하십시오.
[Microoptimizations are evil] (http://blog.codinghorror.com/the-sad-tragedy-of-micro-optimization-theater/) –
대부분 http://stackoverflow.com/questions/1165457의 사본/java-for-loop-vs-while-loop-performance-difference –
스스로 시간을 낼 수 있습니다 .. – Coffee