基於 JDK 1.7.0_79 源碼分析。
List,所有公共方法加 synchronized。Vector → AbstractList → AbstractCollection → Collection → List → Iterable Stack → Vector
實現接口:RandomAccess、Cloneable、Serializable。
capacityIncrement,默認翻倍(ArrayList 為 1.5 倍)。addElement/setElementAt 等,與 add/set 功能重疊。indexOf(elem, fromIndex) 指定起始位置查找。| 方法 | 說明 |
|---|---|
push(E item) | 入棧,返回 item |
pop() | 出棧並返回頂元素,空則拋 EmptyStackException |
peek() | 查看頂元素不移除 |
empty() | 判斷是否為空 |
search(Object o) | 從頂向下搜索,返回 1-based 位置,未找到返回 -1 |
Vectorv = new Vector<>(); for (int i=0;i<10;i++) v.add(i); v.add(5, 99); // 指定位置插入 v.remove(5); // 刪除指定位置 System.out.println(v.get(5)); v.set(5, 55); // 替換 List sub = v.subList(5, 7); // 視圖
Stacks = new Stack<>(); for (int i=0;i<10;i++) s.add(i); System.out.println(s.peek()); // 9 s.push(555); System.out.println(s.pop()); // 555 while (!s.empty()) System.out.print(s.pop() + " "); // 彈出遍歷
| 場景 | 推薦 |
|---|---|
| 單線程、高頻隨機訪問 | ArrayList(非同步、性能優) |
| 多線程、需同步 List | Collections.synchronizedList(new ArrayList<>()) 或 CopyOnWriteArrayList |
| 棧結構 | ArrayDeque(非同步、雙端隊列、性能更好) |
| 多線程棧 | ConcurrentLinkedDeque 或自行同步 |
結論:Vector/Stack 為早期遺留類,現代開發優先選用上述替代品,除非維護舊代碼。