java.util.Vector 作為早期動態陣列實作,在參數傳遞、跨組件資料交換、舊版 Applet 開發中扮演重要角色。本文整理 Vector 核心 API、擴容機制、元素操作演示、介面傳遞模式與 Applet 畫布整合完整範例。
Vector() // 初始容量 10,擴容 2倍
Vector(int initialCapacity) // 指定初始容量
Vector(int initialCapacity, int capacityIncrement) // 指定初始容量與擴容增量
Vector(Collection<? extends E> c) // 從集合初始化
擴容邏輯:capacityIncrement > 0 時按增量擴容;否則雙倍擴容。
| 類別 | 方法 | 說明 |
|---|---|---|
| 新增 | addElement(E obj) | 尾部新增,size+1 |
insertElementAt(E obj, int index) | 指定位置插入,後續元素後移 | |
setElementAt(E obj, int index) | 指定位置替換 | |
addAll(Collection<? extends E> c) | 批次新增 | |
| 刪除 | removeElement(Object obj) | 刪除首個匹配 |
removeElementAt(int index) | 刪除指定位置 | |
removeAllElements() | 清空所有元素 | |
clear() | 清空 (List 介面方法) | |
| 查詢 | elementAt(int index) | 取得指定位置元素 |
firstElement() / lastElement() | 首/尾元素 | |
indexOf(Object obj) | 首次出現索引 | |
contains(Object obj) | 是否包含 | |
size() / isEmpty() / capacity() | 狀態查詢 | |
| 迭代 | elements() | 返回 Enumeration (Vector 獨有) |
iterator() / listIterator() | 標準迭代器 |
Vector v = new Vector();
v.addElement("one"); // [one]
v.addElement("two"); // [one, two]
v.addElement("three"); // [one, two, three]
v.insertElementAt("zero", 0); // [zero, one, two, three]
v.insertElementAt("oop", 3); // [zero, one, two, oop, three]
v.setElementAt("three", 3); // [zero, one, two, three, three]
v.setElementAt("four", 4); // [zero, one, two, three, four]
v.removeAllElements(); // []
跨組件/類別傳遞多參數時,定義介面持有 Vector 作為共享容器:
interface CodeSelect {
Vector codeSelect = new Vector(); // 介面欄位隱含 public static final
}
約定索引語義:
Vector[0]:學生編號 (String)Vector[1]:科目索引 (Integer: 0=國文, 1=數學, 2=政治)public class CodePanel extends Panel implements CodeSelect {
TextField idField = new TextField();
Choice subjectChoice = new Choice();
public void init() {
subjectChoice.add("國文");
subjectChoice.add("數學");
subjectChoice.add("政治");
add(idField);
add(subjectChoice);
}
@Override
public boolean handleEvent(Event evt) {
if (evt.id == Event.ACTION_EVENT) {
if (evt.target instanceof TextField) {
codeSelect.setElementAt(idField.getText(), 0);
} else if (evt.target instanceof Choice) {
codeSelect.setElementAt(new Integer(subjectChoice.getSelectedIndex()), 1);
}
return true;
}
return super.handleEvent(evt);
}
}
public class CodeCanvas extends Canvas implements CodeSelect {
public void paint(Graphics g) {
String studentId = (String) codeSelect.elementAt(0);
Integer subjIdx = (Integer) codeSelect.elementAt(1);
int subject = (subjIdx != null) ? subjIdx.intValue() : -1;
g.drawString("學號: " + studentId, 10, 20);
switch (subject) {
case 0: g.drawString("科目: 國文", 10, 40); break;
case 1: g.drawString("科目: 數學", 10, 40); break;
case 2: g.drawString("科目: 政治", 10, 40); break;
default: g.drawString("科目: 未選擇", 10, 40);
}
}
}
public class VectorDemoApplet extends Applet {
CodePanel panel = new CodePanel();
CodeCanvas canvas = new CodeCanvas();
public void init() {
setLayout(new BorderLayout());
add("North", panel);
add("Center", canvas);
}
}
ArrayList<T> + Collections.synchronizedList() 或 CopyOnWriteArrayListStudentQueryParams 類別,編譯期類型安全、IDE 重構友善handleEvent → AWT 1.1+ ActionListener / JavaFX 事件處理Vector<Object> 明確元素類型,減少轉型Enumeration 介面相容的舊 API 整合理解 Vector 歷史定位與 API 細節,有助於閱讀舊代碼、平滑遷移至現代集合框架,並掌握動態陣列、參數傳遞、組件解耦等核心程式設計概念。