java.util.Vector 是 Java 1.0 即存在的舊式動態陣列實作,雖然 ArrayList 取代其成為主流,但 Vector 因 執行緒安全 特性,在多執行緒環境、舊系統維護、特定框架整合中仍具不可替代地位。本文系統整理 Vector 核心知識點。
| 特性 | Vector | ArrayList |
|---|---|---|
| 執行緒安全 | 所有公有方法 synchronized | 非同步 |
| 擴容策略 | 預設 2 倍(可指定 capacityIncrement) | 1.5 倍 |
| 傳統方法 | 保留 addElement、elementAt 等 1.0 API | 僅實作 List 介面 |
| 效能 | 同步開銷大 | 單執行緒下更快 |
// 1. 預設容量 10,增量 2 倍
Vector v1 = new Vector();
// 2. 指定初始容量
Vector v2 = new Vector(20);
// 3. 指定容量與增量
Vector v3 = new Vector(10, 5); // 滿時每次 +5
// 4. 從現有 Collection 建立
Vector v4 = new Vector(Arrays.asList("A", "B", "C"));
addElement(E obj):尾端新增(同步)insertElementAt(E obj, int index):指定位置插入setElementAt(E obj, int index):替換指定位置元素removeElement(Object obj):移除首個匹配物件removeElementAt(int index):移除指定索引removeAllElements():清空向量elementAt(int index) / get(int index):取得元素firstElement() / lastElement():首/尾元素indexOf(Object o) / lastIndexOf(Object o):搜尋索引contains(Object o):是否包含size() / capacity() / isEmpty()// Enumeration(舊式)
Enumeration<String> e = v.elements();
while (e.hasMoreElements()) System.out.println(e.nextElement());
// Iterator(現代)
for (String s : v) System.out.println(s);
import java.util.Vector;
public class VectorDemo {
public static void main(String[] args) {
Vector<Number> v = new Vector<>(3, 2); // 初始 3,增量 2
System.out.println("初始 size=" + v.size() + " capacity=" + v.capacity());
v.addElement(1);
v.addElement(2);
v.addElement(3); // 第 3 次擴容觸發
System.out.println("加入 3 個後 capacity=" + v.capacity()); // 5
v.addElement(4.5);
System.out.println("加入 1 個後 capacity=" + v.capacity()); // 5
v.addElement(5);
v.addElement(6); // 第 6 個觸發再擴容
System.out.println("加入 6 個後 capacity=" + v.capacity()); // 7
System.out.println("首元素:" + v.firstElement());
System.out.println("尾元素:" + v.lastElement());
System.out.println("是否包含 3:" + v.contains(3));
// 反向遍歷示範
for (int i = v.size() - 1; i >= 0; i--) {
System.out.print(v.get(i) + " ");
}
}
}
初始 size=0 capacity=3
加入 3 個後 capacity=5
加入 1 個後 capacity=5
加入 6 個後 capacity=7
首元素:1
尾元素:6
是否包含 3:true
6 5 4.5 3 2 1
Collections.synchronizedList(new ArrayList<>()) 或 CopyOnWriteArrayList(讀多寫少),Vector 同步粒度較粗,高併發下擴容鎖爭用嚴重。addElement 與 add 混用易造成認知混亂,統一使用 List 介面方法。Vector 是 Java 集合框架的「活化石」,理解其同步機制、擴容策略與傳統 API,有助於維護舊系統、面試應對與特定多執行緒場景選型。新專案首選 ArrayList 或 java.util.concurrent 套件。