Vector与ArrayList区别

1)Vector的方法都是同步的(Synchronized),是线程安全的;

  ArrayList的方法是线程不安全的。

  由于线程同步必然会影响性能,因此,ArrayList的性能比Vector好。

请看下面一段代码:

package com.thread.test;

import java.util.ArrayList;
import java.util.Vector;

public class ArrayListOfThread {
    
    static ArrayList<Integer> al = new ArrayList<Integer>(10);
    
//    static Vector<Integer> al = new Vector<Integer>();
    
    public static class AddThread extends Thread{
        @Override
        public void run() {
            for (int i = 0; i < 1000000; i++) {
                al.add(i);
            }
        }
    }
    
    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(new AddThread());
        Thread t2 = new Thread(new AddThread());
        t1.start();
        t2.start();
        t1.join();
        t2.join();
        System.out.println(al.size());
    }

}

由于ArrayList线程不安全,使用ArrayList时,程序就有可能会抛出异常

Exception in thread "Thread-3" java.lang.ArrayIndexOutOfBoundsException: 163
    at java.util.ArrayList.add(ArrayList.java:459)
    at com.thread.test.ArrayListOfThread$AddThread.run(ArrayListOfThread.java:16)
    at java.lang.Thread.run(Thread.java:745)
1000054

但是如果改用线程安全的Vector,则只会输出如下结果:

2000000

2)当Vector或ArrayList中的元素超过它的初始化大小时,Vector会将它的容量翻倍,

  而ArrayList值增加50%的大小,这样,ArrayList就有利于节省内存空间。

posted @ 2018-01-19 15:55  劈天造陆  阅读(209)  评论(0编辑  收藏  举报