int size = 1000000;
Vector<Integer> list2 = new Vector<Integer>(size);
long start = System.currentTimeMillis();
for(int i=0; i<size; i++)
list2.add(i);
System.out.println(System.currentTimeMillis()-start);
ArrayList<Integer> list1 = new ArrayList<Integer>(size);
start = System.currentTimeMillis();
for(int i=0; i<size; i++)
list1.add(i);
System.out.println(System.currentTimeMillis()-start);换个顺序再看看。
这两个类在速度上的差异小于比较这些类性能的测试所显示的时间差异。
解决方案 »
- java 中Scanner类 关于中文输出的问题
- 菜鸟求解2个习题
- 一道SCJP的题目
- 包的问题
- Collections.sort()与comparator 排序问题
- Buttons.java使用或覆盖了已过时的API
- 好的建议 , 不给分得"非典"!! --- 使用weblogic/Tomcat4 自带的数据库连接池, 是否必须下载JDBC2.0(各种数据库下的JDBC) ?
- JSP的函数中可否调用JAVABEAN?
- sendRedirect方法带来的问题
- 急!急!急!请教JBUILDER问题,如何使JBCL、Swing等非AWT控件能在浏览器中显示?
- 一个关于运行时间的疑惑
- java web开发实战1200例(第二卷)光盘内容(源代码、还有书上没有的几章内容)
所以我感觉如果是单线程的话应该差别会比较小,如果改成多线程集合里面存数的话,差别就应该比较明显了。
2 - 有没有考虑 CPU cache 可能的影响?
3 - 据说 JDK 6 以后,如果JVM能够明显发现对一个 Vector 的访问必定在一个单线程内,则会优化省略 synchronized 时间,楼主的实验中,两个变量 list1 和 list2 都是局部变量,事实上被单线程拘禁。
4 - 测试时间的时候,重要的是精确的时间差而不是事实上的几点几分几秒,所以应该用 nanoTime() 而不是 currentTimeInMillis()实验更改如下:import java.util.ArrayList;
import java.util.List;
import java.util.Vector;public class Test {
private static int size = 10000000;
private static Vector<Integer> list2 = new Vector<Integer>(size);
private static ArrayList<Integer> list1 = new ArrayList<Integer>(size);
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>(size);
for(int i=0; i<size; i++)
list.add(i);
long start = System.nanoTime();
for (int i = 0; i < size; i++)
list2.add(list.get(i));
System.out.println(System.nanoTime() - start);
start = System.nanoTime();
for (int i = 0; i < size; i++)
list1.add(list.get(i));
System.out.println(System.nanoTime() - start);
}
}