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);换个顺序再看看。
这两个类在速度上的差异小于比较这些类性能的测试所显示的时间差异。

解决方案 »

  1.   

     Vector是线程安全的, 所以它的效率比ArrayList低,但是它效率低的原因是实现了Serializable接口
    所以我感觉如果是单线程的话应该差别会比较小,如果改成多线程集合里面存数的话,差别就应该比较明显了。
      

  2.   

    实验有几个问题:1 - 有没有考虑在试验中尽量排除可能存在的差异,比如频繁装箱效率可能存在的差异?
    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);
      }
    }
      

  3.   

    ArrayList是线程安全的, Vector是线程不安全的,现在的发展趋势ArrayList已经取代了Vector
      

  4.   

    现在几乎不怎么用Vector了,都用ArrayList了
      

  5.   

    额,你这是误人子弟啊,“ArrayList是线程安全的, Vector是线程不安全的”明显被你说反了