java.util.Vector 是 Java 早期提供的動態陣列實作,雖被 ArrayList 取代為主流選擇,但在舊系統維護、需同步容器、或使用 Enumeration 介面的場景仍常見。本文系統整理 Vector 核心功能、建構子、完整 API 分類與實戰注意事項。
synchronized)List、RandomAccess、Cloneable、SerializableVector() // 預設初始容量 10,擴容 2 倍
Vector(int initialCapacity) // 指定初始容量
Vector(int initialCapacity, int capacityIncrement) // 指定初始容量與擴容增量
Vector(Collection<? extends E> c) // 從集合初始化(陣列需先轉 List:Arrays.asList(arr))
void addElement(E obj) // 尾部新增
boolean addAll(Collection<? extends E> c) // 批次新增
void insertElementAt(E obj, int index) // 指定位置插入
void setElementAt(E obj, int index) // 指定位置替換
E elementAt(int index) // 取得指定位置元素(同 get)
E firstElement() / E lastElement() // 首/尾元素
int indexOf(Object obj) // 首次出現索引
int lastIndexOf(Object obj) // 最後出現索引
boolean contains(Object obj) // 是否包含
boolean containsAll(Collection<?> c) // 是否包含所有
boolean removeElement(Object obj) // 刪除首個匹配
void removeElementAt(int index) // 刪除指定位置
boolean removeAllElements() // 清空(同 clear())
void clear() // 清空
int size() // 元素個數
int capacity() // 當前容量(Vector 獨有)
boolean isEmpty() // 是否為空
void setSize(int n) // 強制設定大小(Vector 獨有,慎用)
Enumeration<E> elements() // 傳統 Enumeration(Vector 獨有)
Iterator<E> iterator() // 標準 Iterator
ListIterator<E> listIterator() // 雙向迭代器
void copyInto(Object[] anArray) // 複製到陣列(Vector 獨有)
Object[] toArray() // 標準轉陣列
Vector 回傳 Object,取出元素需顯式轉型:
Vector<Customer> v = new Vector<>();
v.add(new Customer("Alice"));
// 正確寫法
Customer c = v.get(0); // 泛型自動轉型(Java 5+)
Customer c = (Customer) v.get(0); // 非泛型寫法
建議:一律使用泛型宣告 Vector<T>,編譯期即可避免 ClassCastException。
| 場景 | 推薦 | 理由 |
|---|---|---|
| 一般單執行緒/高效能 | ArrayList | 無同步開銷,擴容 1.5 倍更平滑 |
| 多執行緒需同步 | Collections.synchronizedList() | 鎖粒度可控,效能優於 Vector |
| 舊系統維護/Enumeration 相依 | Vector | 相容既有代碼,避免重構風險 |
| 需自訂擴容增量 | Vector | ArrayList 擴容策略固定 |
setSize(n) 若 n > size() 會補 null;若 n < size() 直接截斷,資料遺失無警告serialVersionUID 一致總結:Vector 是 Java 集合框架的奠基之作,理解其 API 與特性有助於維護舊代碼;新專案優先考慮 ArrayList 或並發容器,獲得更好效能與彈性。