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包下的類.