顶 经过我机器测试 第一个的时间是第二个的大概两倍! 【把值改到 10000000 时才能看到经历了几十毫秒】 Date date = new Date(); long l1 = new Date().getTime(); for(int i = 10000000; i > 0; i--) {} long l2 = new Date().getTime();for(int i = 1; i < 10000001; i++) {} long l3 = new Date().getTime(); System.out.println(l1); System.out.println(l2); System.out.println(l3); 其中一次的执行结果: 1279175742430 1279175742461 1279175742477第一次大概30毫秒 第二次大概15毫秒。
public class ForTest { public static void for1() { long bTime = System.nanoTime(); for (int i = 0; i < 100000000; i++) { // do nothing } System.out.println(System.nanoTime() - bTime); } public static void for2() { long bTime = System.nanoTime(); for (int i = 100000000; i > 0; i--) { // do nothing } System.out.println(System.nanoTime() - bTime); } public static void main(String[] args) { for2(); for1(); } }测试结果飘忽不定..
两种方法执行速度并没有多大区别Test 1: 56424980 Test 2: 56462213
实测结果: JDK1.5: 第一种慢一倍 JDK1.6: 第一种稍微快一点
第一个直接拿栈顶数和0比较,第二个比较两个栈顶数,应该第一个可能快那么 yi mia mia
经过多番测试,证明:++ -- 都一样!看系统public static void main(String[] args) { long sum = 0l; long start = (new Date()).getTime();
for(int i = 999999999 ; i > 0 ; i --) { sum += i; } long end = (new Date()).getTime();
System.out.println("--- :" + (end - start)); sum = 0; start = (new Date()).getTime();
for(int i = 1 ; i <= 999999999 ; i ++) { sum += i; }
end = (new Date()).getTime(); System.out.println("+++ :" + (end - start)); }
同意,还有,> 比>= 快一些 ,比如 <= size - 1 写成 < size 更好
我觉得是一样快的 其实LZ 没必要纠结这个啊 可以测试下的啊 end-start 就好了啊
建议了解一下cpu执行一条加法指令和一条减法指令的时间。
第一个快,测试结果如下: public class Test { public static void main(String[] args) { long start1 = new java.util.Date().getTime(); for(int i = 100000; i > 0; i--) { System.out.println("循环 1"); } long end1 = new java.util.Date().getTime(); System.out.println(end1-start1);
long start2 = new java.util.Date().getTime(); for(int i = 1; i < 100001; i++) { System.out.println("循环2"); } long end2= new java.util.Date().getTime(); System.out.println(end2-start2); } } 结果: . . . 循环 1 循环 1 循环 1 952 循环2 循环2 循环2 . . . 1516
经过我机器测试 第一个的时间是第二个的大概两倍!
【把值改到 10000000 时才能看到经历了几十毫秒】
Date date = new Date();
long l1 = new Date().getTime();
for(int i = 10000000; i > 0; i--) {}
long l2 = new Date().getTime();for(int i = 1; i < 10000001; i++) {}
long l3 = new Date().getTime();
System.out.println(l1);
System.out.println(l2);
System.out.println(l3);
其中一次的执行结果:
1279175742430
1279175742461
1279175742477第一次大概30毫秒
第二次大概15毫秒。
public class ForTest {
public static void for1() {
long bTime = System.nanoTime();
for (int i = 0; i < 100000000; i++) {
// do nothing
}
System.out.println(System.nanoTime() - bTime);
} public static void for2() {
long bTime = System.nanoTime();
for (int i = 100000000; i > 0; i--) {
// do nothing
}
System.out.println(System.nanoTime() - bTime);
} public static void main(String[] args) {
for2();
for1();
}
}测试结果飘忽不定..
Test 2: 56462213
JDK1.5: 第一种慢一倍
JDK1.6: 第一种稍微快一点
long sum = 0l;
long start = (new Date()).getTime();
for(int i = 999999999 ; i > 0 ; i --) {
sum += i;
}
long end = (new Date()).getTime();
System.out.println("--- :" + (end - start));
sum = 0;
start = (new Date()).getTime();
for(int i = 1 ; i <= 999999999 ; i ++) {
sum += i;
}
end = (new Date()).getTime();
System.out.println("+++ :" + (end - start));
}
同意,还有,> 比>= 快一些 ,比如 <= size - 1 写成 < size 更好
其实LZ 没必要纠结这个啊
可以测试下的啊 end-start 就好了啊
public class Test {
public static void main(String[] args) {
long start1 = new java.util.Date().getTime();
for(int i = 100000; i > 0; i--) {
System.out.println("循环 1");
}
long end1 = new java.util.Date().getTime();
System.out.println(end1-start1);
long start2 = new java.util.Date().getTime();
for(int i = 1; i < 100001; i++) {
System.out.println("循环2");
}
long end2= new java.util.Date().getTime();
System.out.println(end2-start2);
}
}
结果:
.
.
.
循环 1
循环 1
循环 1
952
循环2
循环2
循环2
.
.
.
1516
你这个测试结果是在哪里运行的?如果是在eclipse里面,恭喜你,测试不公平,永远第一个合算。
public static void main(String[] agrs){
long start1 = new java.util.Date().getTime();
for(int i=100000;i>0;i--)
{
System.out.println("循环1");
}
long end1 = new java.util.Date().getTime();
System.out.println(end1-start1);
}
}
/*循环1
循环1
循环1
40995*/
/*Eclipse下循环1
循环1
循环1
1524
*/public class Test2 {
public static void main(String[] args){
long start2 = new java.util.Date().getTime();
for(int i=1;i<100000;i++)
{
System.out.println("循环2");
}
long end2 = new java.util.Date().getTime();
System.out.println(end2-start2);
}
}
/*
循环2
循环2
循环2
循环2
循环2
循环2
38794
*/
/*
Eclipse下
循环2
循环2
循环2
1406
*/