更新時間:2023-03-23 來源:黑馬程序員 瀏覽量:

ArrayList和Vector都是實現(xiàn)了List接口的動態(tài)數(shù)組,它們的實現(xiàn)方式很相似,但也有以下幾點不同:
1.線程安全性:Vector是線程安全的,而ArrayList則不是線程安全的。也就是說,在多線程環(huán)境下,Vector比ArrayList更適合使用。
2.擴容方式:當需要增加容量時,Vector默認增加原來容量的一倍,而ArrayList增加原來容量的一半。這也是為什么在使用ArrayList時,如果能夠提前確定List的大小,最好使用帶初始容量的構(gòu)造函數(shù)。
  接下來我們使用Java代碼演示ArrayList和Vector的不同之處:
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
public class Main {
    public static void main(String[] args) {
        List<String> arrayList = new ArrayList<>();
        List<String> vector = new Vector<>();
        // 向ArrayList和Vector中添加元素
        for (int i = 0; i < 10; i++) {
            arrayList.add("ArrayList " + i);
            vector.add("Vector " + i);
        }
        // 遍歷ArrayList和Vector
        System.out.println("ArrayList:");
        for (String s : arrayList) {
            System.out.println(s);
        }
        System.out.println("\nVector:");
        for (String s : vector) {
            System.out.println(s);
        }
        // 測試Vector的線程安全性
        new Thread(() -> {
            for (int i = 0; i < 10; i++) {
                vector.add("Thread " + i);
            }
        }).start();
        // 等待一段時間,確保子線程執(zhí)行完畢
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // 再次遍歷Vector,可以看到新加入的元素
        System.out.println("\nVector after adding elements in another thread:");
        for (String s : vector) {
            System.out.println(s);
        }
    }
}  輸出結(jié)果:
ArrayList: ArrayList 0 ArrayList 1 ArrayList 2 ArrayList 3 ArrayList 4 ArrayList 5 ArrayList 6 ArrayList 7 ArrayList 8 ArrayList 9 Vector: Vector 0 Vector 1 Vector 2 Vector 3 Vector 4 Vector 5 Vector 6 Vector 7 Vector 8 Vector 9 Vector after adding elements in another thread: Vector 0 Vector 1 Vector 2 Vector 3 Vector 4 Vector 5 Vector 6 Vector 7 Vector 8 Vector 9 Thread 0 Thread 1 Thread 2 Thread 3 Thread 4 Thread 5 Thread 6 Thread 7 Thread 8 Thread 9
可以看到,ArrayList和Vector的使用方式很相似,但在多線程環(huán)境下,Vector比ArrayList更適合使用。