看文章看到这样的题目及答案:
-------------------------------------------------------------------------------------------------------------------------------------
海贝尔的面试题:你认为效率最高的方法,实现从1加到100.
答案:1-100的累加相当于加50次101,这样循环次数从100次降为50次:
-------------------------------------------------------------------------------------------------------------------------------------
有点勾起我的好奇心,于是就试了试
package fuckTest;
/**
* Created by Administrator on 2017/7/28.
*/
public class TestForeach {
public static void main(String[] args) throws InterruptedException {
long startMili = System.currentTimeMillis();// 当前时间对应的毫秒数
// Thread.sleep(1000); // out:1000
//循环十万次
Integer n = 0, k = 100000;
while(--k > 0) {
// out:170 ± 20
for (int i = 0; i < 100; i++) {
n++;
}
// out:100 ± 50
for (int i = 1, j = 100; i <= 50 ; i++, j--) {
n += i + j;
}
// out:50 ± 30
for (int i = 1, j = 50, x = 51, y = 100; i <= 25; i++, x++, j--, y--) {
n += i+j+x+y;
}
}
long endMili = System.currentTimeMillis();
System.out.println(endMili - startMili);
}
}
三种遍历,本次实验是对1到100求和重复十万次,求总用时(毫秒)
1. i:1-100
for (int i = 0; i < 100; i++) //最常见的for遍历,经过多次测试,用时为170(±20)毫秒
2. i:1-50; j:100-51
for (int i = 1, j = 100; i <= 50 ; i++, j--) //两个参数两头开功,多次测试,用时为100(±50)毫秒
3.i:1-25; j:50-26; x:51-75; y:100-76
for (int i = 1, j = 50, x = 51, y = 100; i <= 25; i++, x++, j--, y--) //四个参数齐头并进,多次测试,用时为50(±30)
我本来预计两个参数是效率的峰值,跟我预计的不一样啊,结果是四个参数用时明显最少,往下大家可以自己在测试,反正验证网上的答案不对