Java Collections Framework之Vector
Hierarchy如下:
該類的主要方法如下圖所示:
三個protect字段
capacityIncrement:每次數組擴充的個數,如果為0,新容量是原來的2倍, 如果不為0,新容量為原來的容量加上此長度,代碼體現在:
elementCount : 數組中元素的個數。
elementData:為該Vector的實現數組。
含有兩個參數的構造函數:
initialCapacity代表該數組的初始化長度,capacityIncrement代表該數組滿后的擴張因子。
含有一個參數的構造函數:
此時capacityIncrement為0
不含參數的構造函數:
此時的initialCapacity為10 capacityIncrement為0
構造參數類型為Collection的構造函數
add(E e):向該Vector中添加一元素
此方法是線程安全的,在給數組新的index賦值前會調用ensureCapacityHelper方法,保證改數組的容量在占滿時擴充為新的數組。
擴充為新數組的調用的是
此方法為native方法,依賴于具體的JVM實現。
add(int index, E element):在指定的位置插入元素
此時 該index位置的元素向后移動,然后把obj插入index,這樣便影響了效率,該方法同樣要檢查內部數組是否需要擴張。
addAll(int index, Collection
c):
將原來index處元素向右移動c.toArray().length個長度,然后將c中的元素復制到elementData數組中。
addAll(Collection
c):
將c中的元素依次復制到elementData數組中(線程安全)
addElement(E obj):
添加一個元素。
capacity():
返回該內部數組的長度。
clear():
清空該Vector。
clone():
通過該Vector克隆一個新的Vector,該克隆為淺拷貝。
contains(Object o):
判斷該Vector是否含有某對象o
containsAll(Collection
c):
調用父類AbstractCollection
copyInto(Object[] anArray):
將該Vector中的元素拷貝至anArray中。
elementAt(int index):
獲取索引為index位置的元素。
elements():
返回該Vector的枚舉表示。
firstElement():
返回該集合的第一個元素。
get(int index):
根據索引找到指定的元素。
insertElementAt(E obj, int index):
在指定的位置插入某元素。
isEmpty():
判斷該集合是否為空。
lastElement():
該集合的最后一個元素。
lastIndexOf(Object o, int index):
從該集合的index位置向前查找第一次出現該o的索引。
remove(int index):
刪除該index處的元素,同時后面的元素向前移動,這樣會消耗一定的時間。
remove(Object o):
從該集合中刪除特定的o,但是只會刪除第一次出現的這個o,同時后面的依次向左移動。
removeAll(Collection
c):
從該集合中刪除c中含有的元素。
removeRange(int fromIndex, int toIndex):
移除fromIndex到toIndex之間的元素,同時后面的元素左移,空的set為null以便GC回收。
retainAll(Collection
c):
刪除該集合中含有c集合中的元素。
set(int index, E element):
將指定的index位置設置為element,不涉及到前后元素的移動。
setSize(int newSize):
改變該集合的容量。
size():
返回該集合的大小。
subList(int fromIndex, int toIndex):
返回該集合的子集合。
toArray() :
返回該集合的Object數組表示。
toArray(T[] a):
返回該集合的特定的數組表示。
trimToSize():
縮小容量,恰好撐得下該集合中的元素。
總結:
該集合中的所有方法都是線程安全的,保證了狀態一致性但是犧牲了運行效率。
根據索引獲取元素很快,按索引刪除元素要涉及到后續元素的向前移動,根據對象刪除的話還需要先查到該
元素在集合中的索引,查找某一元素速度相對快些。插入快,刪除相對慢,查找相對快。