1. 程式人生 > >Java集合(五)棄用的Vector和Stack

Java集合(五)棄用的Vector和Stack

Vector簡介

Vector 是向量佇列,它是JDK1.0版本新增的類。繼承於AbstractList,實現了List, RandomAccess, Cloneable這些介面。
Vector 繼承了AbstractList,實現了List;所以,它是一個佇列,支援相關的新增、刪除、修改、遍歷等功能
Vector 實現了RandmoAccess介面,即提供了隨機訪問功能。RandmoAccess是java中用來被List實現,為List提供快速訪問功能的。在Vector中,我們即可以通過元素的序號快速獲取元素物件;這就是快速隨機訪問。
Vector 實現了Cloneable介面,即實現clone()函式。它能被克隆。

和ArrayList不同,Vector中的操作是執行緒安全的

歷史:

其實ArrayListhe和Vector在用法上完全相同.但由於Vector是一個古老的集合.(從jdk1.0就有了),那時候java還沒有提供系統的集合框架,所以在Vector裡提供了一些方法名很長的方法.例如:addElement(Object obj),實際上這個方法和add(Object obj)沒什麼區別.

從jdk1.2以後,Java提供了系統的集合框架,就將Vector改為實現List介面,作為List的實現之一,從而導致Vector裡有一些重複的方法.

Vector裡有一些功能重複的方法,這些方法中方法名更短的是屬於後來新增的方法.更長的是原先vector的方法.而後來ArrayList是作為List的主要實現類.看過的Java思想程式設計中也提到了Vector有很多缺點.儘量少用Vector實現類.

第2部分 Stack

public class Stack<E>extends Vector<E>

由於Vector是通過陣列實現的,這就意味著,Stack也是通過陣列實現的,而非連結串列。

Stack類表示後進先出(LIFO)的物件堆疊。它通過五個操作對類Vector進行了擴充套件 ,允許將向量視為堆疊。它提供了通常的push和pop操作,以及取堆疊頂點的peek方法、測試堆疊是否為空的empty方法、在堆疊中查詢項並確定到堆疊頂距離的search方法。

首次建立堆疊時,它不包含項。

Deque 介面及其實現提供了 LIFO 堆疊操作的更完整和更一致的 set,應該優先使用此 set,而非此類

。例如:

Deque<Integer> stack = new ArrayDeque<Integer>();

從以下版本開始: JDK1.0

第三部分 結論

這兩個都是jdk1.0的過時API,應該避免使用.因此不再對其原始碼進行解析學習.

jdk1.5新增了很多多執行緒情況下使用的集合類.位於java.util.concurrent.

如果你說,Vector是同步的,你要在多執行緒使用.那你應該使用java.util.concurrent.CopyOnWriteArrayList等而不是Vector.

如果你要使用Stack做類似的業務.那麼非執行緒的你可以選擇linkedList,多執行緒情況你可以選擇java.util.concurrent.ConcurrentLinkedDeque 或者java.util.concurrent.ConcurrentLinkedQueue

多執行緒情況下,應儘量使用java.util.concurrent包下的類.