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

Vector简介java

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>dom

因为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包下的类.

相关文章
相关标签/搜索