Java for和while循环有多贵?
问题是要比较Java for和while循环有多贵?,java,performance,if-statement,for-loop,while-loop,Java,Performance,If Statement,For Loop,While Loop,问题是要比较for和while循环的成本与if语句的成本 假设if语句的相对开销为1,那么for和while循环的相对开销是多少 假设在比较时将单个布尔值传递到while循环和if语句,并且允许while迭代X次。假设for也迭代X次。就性能而言,if语句通常是O(1)复杂度,其中asfor和而循环通常是O(n),其中n是根据条件所采取的循环数量。例如: for (int i = 0; i < 100; i++) { // Some statements } for(int i=
for
和while
循环的成本与if
语句的成本
假设if语句的相对开销为1,那么for和while循环的相对开销是多少
假设在比较时将单个布尔值传递到
while
循环和if
语句,并且允许while
迭代X次。假设for
也迭代X次。就性能而言,if
语句通常是O(1)复杂度,其中asfor
和而循环通常是O(n),其中n是根据条件所采取的循环数量。例如:
for (int i = 0; i < 100; i++)
{
// Some statements
}
for(int i=0;i<100;i++)
{
//一些声明
}
将是O(100),因为它循环了100次。for
循环中有多少语句并不重要,除非初始循环中有其他循环。然后你得到O(n^2)复杂性,它是二次的,因此效率很低
但是,不要让这吓到你。循环的存在是有原因的,它们在许多程序中都是必需的 循环是语言结构。您可以编写while
循环来执行与for
循环相同的操作,反之亦然
假设if语句的相对开销为1,那么for和while循环的相对开销是多少
用于
循环和,而
循环也会检查条件。从这个意义上讲,它们也有1
的成本。关键是,循环中通常有一些东西会影响该条件
考虑一下这个代码
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++;
}
}
您会注意到这两个循环执行完全相同的操作,并生成完全相同的字节码 大部分是复制品,你可以自己计时看。。循环中的单个布尔值会发生什么变化?如果不修改,它们基本上都是If语句。如果修改,If语句执行一次,while/可能执行多次(显然,这就是为什么不清楚您实际上在问什么),但它们不可比较!if语句最多执行一次,for/while循环可能执行多次。@laiello-Nah。。我知道。只是太简短而已。也许我们可以快速判断,如果你需要循环100次,它肯定比100个if语句更干净。此外,除非你正在做一些非常密集的工作,否则你几乎不会注意到今天计算机的这些时差。我同意,但我恳请你去找一位算法教授,对他说“循环复杂性无关紧要”。也许不是整个程序,但在计算机科学中,它是非常重要的。
// 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