1. 程式人生 > >Vector與ArrayList區別

Vector與ArrayList區別

可能 thread imp test ide log pre over void

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就有利於節省內存空間。

Vector與ArrayList區別