关于Vector和动态数组的性能问题
java2核心技术这本书中提到的:
Vector的工作速度要比数组慢的多,并给出了测试代码,可我在我的机器上运行却得到了大相径庭的结果,测试程序如下:
import java.util.*;
class VectorBenchMark {
public static void main(String[] args) {
Vector v = new Vector();
long start = new Date().getTime();
for ( int i = 0; i < MAXSIZE; i++ ) {
v.add(new Integer(i));
}
long end = new Date().getTime();
System.out.println("Allocating vector elements: " + (end - start) + " milliseconds");
Integer[] a = new Integer[1];
start = new Date().getTime();
for ( int i = 0; i < MAXSIZE; i++ ) {
if ( i >= a.length ) {
Integer[] b = new Integer[i*2];
System.arraycopy(a,0,b,0,a.length);
a = b;
}
a[i] = new Integer(i);
}
end = new Date().getTime();
System.out.println("Allocation array elements: " + (end - start) + " milliseconds");
start = new Date().getTime();
for ( int j = 0; j < NTRIES; j++ ) {
for ( int i = 0; i < MAXSIZE; i++ ) {
Integer r = (Integer)v.get(i);
v.set(i,new Integer(r.intValue() + 1));
}
}
end = new Date().getTime();
System.out.println("Accessing vector elements: " + (end - start) + " milliseconds");
start = new Date().getTime();
for ( int j = 0; j < NTRIES; j++ ) {
for ( int i = 0; i < MAXSIZE; i++ ) {
Integer r = a[i];
a[i] = new Integer(r.intValue() + 1);
}
}
end = new Date().getTime();
System.out.println("Accessing array elements: " + (end - start) + " milliseconds");
}
public static final int MAXSIZE = 100000;
public static final int NTRIES = 10;
}
作者在200Mhz的pentium上的测试结果:
17910
4220
18130
10110
我在1G的pentium上的测试结果是:
70
91
550
381