上一篇中咱們介紹了ArrayList。其實在ArrayList的源碼註釋中就明確的指出了ArrayList這個類大體的等於Vector除了ArrayList是不一樣步的。那麼如今趁熱打鐵,咱們開始學習一下Vector。 java
這個Vector一樣也實現了RandomAccess這個標記類,同ArrayList同樣,表明可以高效的實現隨機訪問。數組
同上篇同樣,咱們也是先來看看Vector的屬性 安全
能夠看到,屬性相比ArrayList的少了,那如今咱們來看看這幾個東西是幹啥的。dom
很簡單,屬性就上面那三個。咱們能夠發現Vector的底層存儲結構就是一個數組。性能
對於Vector的基本方法,不作太多介紹,其實就是對數組的操做,主要,對於數組的移位操做使用的System.arraycopy來完成,還有一個特色相比較ArrayList來講就是他的許多方法都有一個關鍵字synchronized。這就是爲何說Vector是同步的緣由。咱們看一下下面的圖來體會一下: 學習
咱們重點說一下subList方法,同時也是對ArrayList的一個補充。spa
subList返回的List是基於這個Vector或者ArrayList的的,也就是說,對subList返回的List進行的操做的結果最後會反映到源Vector或ArrayList上的,咱們用代碼來體會一下:線程
public class TestMain {
public static void main(String[] args){
System.out.println("===============ArrayList=================");
List<String> list = new ArrayList<>(Arrays.asList("1", "2", "3", "4", "5"));
List<String> subList = list.subList(0,2);
subList.add("我是subList插入的");
list.forEach(value ->System.out.print(value+" ,") );
System.out.println();
System.out.println("===============Vector==================");
Vector<String> vector = new Vector<>(Arrays.asList("1", "2", "3", "4", "5"));
List<String> subVector = vector.subList(0,2);
subVector.add("我是subVector插入的");
vector.forEach(value ->System.out.print(value+" ,"));
}
}
複製代碼
運行結果以下:3d
有上一節的鋪墊,咱們不作太多無用的的查看,直接看擴容的核心代碼:code
這就是Vector擴容的核心代碼,看到與ArrayList的大同小異,不過這裏確實多了一個這個東西,
在計算新的容量的時候,看了capacityIncrement的值是否是大於0,這個就是咱們所說Vector與ArrayList擴容的不一樣處了,Vector能夠自定義增加係數,控制須要擴容時增加的容量大小。當沒有指定時默認增加爲原來的兩倍,與ArrayList同樣,因爲數組不能動態增大,因此是使用Arrays.copyOf從新生成了一個數組。