for循环的速度:超出Big-O符号

时间:2015-10-31 16:20:22

标签: java for-loop break

这个问题与Big-O符号无关。

实际上让我感到惊讶的是。请考虑代码段:

for(int i = 0; i < 13; i++){
        long beg = System.currentTimeMillis();

        int k, l;

        for(l = 0; l < 1000000; l++){
            for(int j = 0; j < 65535; j++) {
                if(pixels[j] == pixels[l])
                    k = j;
                    //j = 70000;
            }
        }

        System.out.println(System.currentTimeMillis() - beg + " ms");
        System.out.println();
    }

输出是:

10 ms

30 ms

10 ms

10 ms

10 ms

10 ms

10 ms

10 ms

10 ms

10 ms

10 ms

现在,请考虑代码段:

for(int i = 0; i < 13; i++){
        long beg = System.currentTimeMillis();

        int k, l;

        for(l = 0; l < 1000000; l++){
            for(int j = 0; j < 65535; j++) {
                if(pixels[j] == pixels[l])
                    //k = j;
                    j = 70000;
            }
        }

        System.out.println(System.currentTimeMillis() - beg + " ms");
        System.out.println();
    }

输出为:&#34; 164596 ms&#34;等等。为什么呢?

1 个答案:

答案 0 :(得分:2)

您每次都将j重置为0.

这意味着你有一个无限循环。

for(int j = 0; j < 65535; j++) {
            //break;
            j = 0;
        }