Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java for和while循环有多贵?_Java_Performance_If Statement_For Loop_While Loop - Fatal编程技术网

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)复杂度,其中as
for
循环通常是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