1. 程式人生 > >Java之集合(四)Vector和Stack

Java之集合(四)Vector和Stack

index 說明 原因 play 技術分享 操作 決定 lis java集合

  轉載請註明源出處: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。

  除了上面所說的線程安全的不同之外,其它幾乎是一樣的,方法定義及名稱有些許不同,唯一剩下的區別就在於擴容的大小不一樣。

技術分享

  ArrayList是原來的三倍,Vector不指定就是原來的兩倍。其它的也沒有什麽可說明的了,叠代器也是重寫的,也實現了線程安全。

3.Stack

  Stack繼承子Vector也是線程安全的,其實現也借助了Vector的數據結構和方法。簡單的說就是一個push操作:往數組中最後添加元素,pop操作:取出最後一個元素。這樣達到先入後出的效果,還有一個peek操作只看不取。

  技術分享技術分享技術分享

  看過去push沒有同步,實際上調用的父類的addElement操作是進行了同步,這裏就不需要同步了。其它的也就一個search操作,使用的是lastIndexOf方法,倒序遍歷而已。

4.圖

  Vector的圖就不再給出,此處給Stack的操作圖。

技術分享

Java之集合(四)Vector和Stack