近幾天,看老大的框架,里面出現(xiàn)這樣的語(yǔ)句for (int i = 0, size = c.size(); i < size; i++),我總覺(jué)得這個(gè)和for (int i = 0; i < c.size(); i++)沒(méi)有什么不同,畢竟java不是C,一般情況下,我們程序給運(yùn)行了,底層JVM應(yīng)該給我們優(yōu)化才是。于是,我寫(xiě)了個(gè)程序?qū)Ρ攘艘幌?,發(fā)現(xiàn)性能情況還是很大不同的。
package com.wang.test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
public class Test {
private final static int Length = 1000;
public static void main(String[] args) {
int length = 1000;
List<Double> c = new ArrayList<Double>();
initSet(c);
long t1 = System.currentTimeMillis();
test1(c);
long t2 = System.currentTimeMillis();
test2(c);
long t3 = System.currentTimeMillis();
test3(c);
long t4 = System.currentTimeMillis();
test4(c);
long t5 = System.currentTimeMillis();
System.out
.println("*******************************************************************");
System.out.println(t2 - t1);
System.out.println(t3 - t2);
System.out.println(t4 - t3);
System.out.println(t5 - t4);
}
private static void test3(List<Double> c) {
for (Iterator<Double> iterator = c.iterator(); iterator.hasNext();) {
System.out.println(iterator.next());
}
}
private static void test2(List<Double> c) {
for (int i = 0; i < c.size(); i++) {
System.out.println(c.get(i));
}
}
private static void test4(List<Double> c) {
for (int i = c.size() - 1; i >= 0; i--) {
System.out.println(c.get(i));
}
}
private static void test1(List<Double> c) {
for (int i = 0, size = c.size(); i < size; i++) {
System.out.println(c.get(i));
}
}
private static void initSet(List<Double> c) {
for (int i = 0; i < Length; i++) {
c.add(Math.random());
}
}
}
Length==1000時(shí):
94
62
32
31
Length==10000時(shí):
516
406
375
344
Length==100000時(shí):
3563
3453
3641
3453
Length==1000000時(shí):
35109
34625
36469
34891
JVM到底有沒(méi)有優(yōu)化呢。我沒(méi)有打開(kāi)匯編看。但至少我得出結(jié)論:for (int i = 0, size = c.size(); i < size; i++)這種寫(xiě)法沒(méi)有必要。數(shù)據(jù)量不大的時(shí)候,反而效率低很多。
各位高手給建議。。。。。。。Why