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

Java 集合深度解析:Vector 與 Stack 源碼、特性與使用建議

     編輯:Java 綜合教學

Java 集合深度解析:Vector 與 Stack

基於 JDK 1.7.0_79 源碼分析。

定義與定位

  • Vector:線程安全的動態數組,實現 List,所有公共方法加 synchronized。
  • Stack:繼承 Vector,提供後進先出(LIFO)棧操作,同樣線程安全。

繼承體系

Vector → AbstractList → AbstractCollection → Collection → List → Iterable
Stack → Vector

實現接口:RandomAccess、Cloneable、Serializable。

Vector 關鍵特性

  1. 線程安全,但性能較差(全方法同步)。
  2. 擴容策略:可配置 capacityIncrement,默認翻倍(ArrayList 為 1.5 倍)。
  3. 保留歷史冗余方法:addElement/setElementAt 等,與 add/set 功能重疊。
  4. 支持 indexOf(elem, fromIndex) 指定起始位置查找。

Stack 專有方法

方法說明
push(E item)入棧,返回 item
pop()出棧並返回頂元素,空則拋 EmptyStackException
peek()查看頂元素不移除
empty()判斷是否為空
search(Object o)從頂向下搜索,返回 1-based 位置,未找到返回 -1

使用示例

Vector 基本操作

Vector v = 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); // 視圖

Stack 棧操作

Stack s = 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(非同步、性能優)
多線程、需同步 ListCollections.synchronizedList(new ArrayList<>()) 或 CopyOnWriteArrayList
棧結構ArrayDeque(非同步、雙端隊列、性能更好)
多線程棧ConcurrentLinkedDeque 或自行同步

結論:Vector/Stack 為早期遺留類,現代開發優先選用上述替代品,除非維護舊代碼。

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