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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM