首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java Vector 完全指南:動態陣列核心 API、擴容機制與類型轉換實戰

     編輯:Java 相關知識

java.util.Vector 是 Java 早期提供的動態陣列實作,雖被 ArrayList 取代為主流選擇,但在舊系統維護、需同步容器、或使用 Enumeration 介面的場景仍常見。本文系統整理 Vector 核心功能、建構子、完整 API 分類與實戰注意事項。

核心特性

  • 儲存任意物件(不可直接存基本類型,需包裝類)
  • 容量自動擴充(預設 2 倍,可透過建構子指定增量)
  • 執行緒安全(所有公有方法 synchronized)
  • 實作 List、RandomAccess、Cloneable、Serializable

三種建構子

Vector()                    // 預設初始容量 10,擴容 2 倍
Vector(int initialCapacity) // 指定初始容量
Vector(int initialCapacity, int capacityIncrement) // 指定初始容量與擴容增量
Vector(Collection<? extends E> c) // 從集合初始化(陣列需先轉 List:Arrays.asList(arr))

核心 API 分類速查

新增元素

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。

Vector vs ArrayList 選型建議

場景推薦理由
一般單執行緒/高效能ArrayList無同步開銷,擴容 1.5 倍更平滑
多執行緒需同步Collections.synchronizedList()鎖粒度可控,效能優於 Vector
舊系統維護/Enumeration 相依Vector相容既有代碼,避免重構風險
需自訂擴容增量VectorArrayList 擴容策略固定

常見陷阱提醒

  1. setSize 陷阱:setSize(n) 若 n > size() 會補 null;若 n < size() 直接截斷,資料遺失無警告
  2. capacity() ≠ size():容量是底層陣列長度,非元素個數
  3. Enumeration 不支援 remove:遍歷中刪除請用 Iterator
  4. 序列化相容:跨 JVM 版本傳輸 Vector 需確保元素類別 serialVersionUID 一致

總結:Vector 是 Java 集合框架的奠基之作,理解其 API 與特性有助於維護舊代碼;新專案優先考慮 ArrayList 或並發容器,獲得更好效能與彈性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved