Java之集合(四)Vector和Stack

  转载请注明源出处:http://www.cnblogs.com/lighten/p/7296023.html

1.前言

  本章介绍Java集合List中的Vector和其子类Stack。Vector类是Java 1.0就提供的一个集合类,其实现和上章讲解的ArrayList几乎一样,在下面会简单介绍一下(不然就没有可说的了),其子类Stack是一个程序员都比较熟悉的栈结构,特点就是先入后出,Stack其实也较为简单,会简单描述一下。

2.Vector

  在前言中也谈到了Vector与ArrayList几乎一样,为什么会有两个重复作用的类呢?原因很简单,Vector和ArrayList最大的不同就是Vector是线程安全的,而ArrayList是线程不安全的。而Vector也说了是Java 1.0就提供了的一个类,而ArrayList是后面Java 1.2版本才提供的类。至于原因想必应该都清楚了,那就是效率。在很多场合下,我们需要的并不是一个线程安全的类,比如单线程或者保证只有一个线程可以访问对象时,线程安全就没有多大意义了,反而会造成程序运行效率低下。所以,是否需要线程安全应该由开发者决定,这是Java早期犯的一个错误,所提供的大部分都是线程安全的类,相似的类有StringBuffer和StringBuilder。

  除了上面所说的线程安全的不同之外,其它几乎是一样的,方法定义及名称有些许不同,唯一剩下的区别就在于扩容的大小不一样。

Java之集合(四)Vector和Stack

  ArrayList是原来的三倍,Vector不指定就是原来的两倍。其它的也没有什么可说明的了,迭代器也是重写的,也实现了线程安全。

3.Stack

  Stack继承子Vector也是线程安全的,其实现也借助了Vector的数据结构和方法。简单的说就是一个push操作:往数组中最后添加元素,pop操作:取出最后一个元素。这样达到先入后出的效果,还有一个peek操作只看不取。

  Java之集合(四)Vector和StackJava之集合(四)Vector和StackJava之集合(四)Vector和Stack

  看过去push没有同步,实际上调用的父类的addElement操作是进行了同步,这里就不需要同步了。其它的也就一个search操作,使用的是lastIndexOf方法,倒序遍历而已。

4.图

  Vector的图就不再给出,此处给Stack的操作图。

Java之集合(四)Vector和Stack