一、構造方法
Vector():構造一個空向量,使其內部數據數組的大小為 10,其標准容量增量為零。
Vector(int initialCapacity) :使用指定的初始容量和等於零的容量增量構造一個空向量
Vector(int initialCapacity, int capacityIncrement):使用指定的初始容量和容量增量構造一個空的向量
Vector(Collection<? extends E> c) :構造一個包含指定 collection 中的元素的向量,這些元素按其 collection 的迭代器返回元素的順序排列。
源碼跟蹤:
1、先看無參的構造方法:
2、有一個 int 參數的構造方法
3、有兩個 int參數的構造方法
總結:
從上面的三個方法中可以看出,如果調用無參的構造方法,默認初始化的長度為10的數組,默認增量為0。
當使用一個參數時,可以為其指定初始化容量。
當使用兩個參數的方法時,不僅僅可以指定初始化容量,還可以指定增量。
二、常用方法
1、add(E e) 方法
源碼跟蹤(JDK1.8):
源碼跟蹤(JDK1.9):
總結:
當調用 add(E e) 方法時,會調用第二張圖的 add 方法,其中會檢驗長度是否夠,如果不夠,會調用圖三的 grow 方法,grow 方法中調用了圖四的 newCapacity 擴容方法,如果你手動指定了capacityIncrement的值,那么可以按照你指定增量進行擴容。如果沒有默認值為0,會擴容為原來的2倍。
2、add(int index,Object e)方法
源碼跟蹤(JDK1.8):
源碼跟蹤(JDK1.9):
總結:
可以看出,當調用add(index,Object) 方法后,實際上是調用的 insert 方法,首先進行了index的校驗,然后是數組長度的校驗,然后進行數據的插入。
3、remove(int index) 方法
源碼跟蹤(JDK1.8):
總結:根據索引刪除一個元素,會先進行索引的校驗,然后判斷需要挪動的元素的個數;如果為0個,不需要執行操作,節省時間,如果不為0,再移動數組。
4、remove(Object) 方法
源碼跟蹤(JDK1.8):
總結:
當根據一個元素值刪除時,會先去查找該值所在的索引,如果能夠找到,在根據索引進行刪除。
5、indexOf(Object obj) 與 indexOf(Object obj, int index) 方法
源碼跟蹤(JDK1.8):
總結:
查詢元素位置時,對元素進行分情況討論,① 是null;② 不是 null。然后進行查找,第二個參數為指定開始查找的索引,如果不指定,默認從0開始查找。
6、set(int index, Object obj) 方法
源碼跟蹤(JDK1.8):
總結:
根據索引賦值時,首先進行索引的校驗,然后把新值填充到指定索引的位置。