Vector共有4個構(gòu)造函數(shù)
// 默認構(gòu)造函數(shù)
Vector()
// capacity是Vector的默認容量大小吆倦。當由于增加數(shù)據(jù)導致容量增加時,每次容量會增加一倍菱鸥。
Vector(int capacity)
// capacity是Vector的默認容量大小嚷那,capacityIncrement是每次Vector容量增加時的增量值。
Vector(int capacity, int capacityIncrement)
// 創(chuàng)建一個包含collection的Vector
Vector(Collection<? extends E> collection)
先看一下Vector的add()方法 :
public synchronized boolean add(E e) {
modCount++;
ensureCapacityHelper(elementCount + 1);
elementData[elementCount++] = e;
return true;
}
很容易理解羹与, 直接 在elementCount+1個位置插入這個對象。
指定位置插入對象:
public synchronized void insertElementAt(E obj, int index) {
modCount++;
if (index > elementCount) {
throw new ArrayIndexOutOfBoundsException(index
+ " > " + elementCount);
}
ensureCapacityHelper(elementCount + 1);
System.arraycopy(elementData, index, elementData, index + 1, elementCount - index);
elementData[index] = obj;
elementCount++;
}
和ArrayList的處理方法是一樣的庶灿。將第index個位置往后移一個單位纵搁,然后在第index位置插入對象 。
public synchronized boolean addAll(Collection<? extends E> c) {
modCount++; //統(tǒng)計修改次數(shù)累加往踢。
Object[] a = c.toArray(); // 集合轉(zhuǎn)為數(shù)組
int numNew = a.length; // 要添加集合里對象的個數(shù) 腾誉。
ensureCapacityHelper(elementCount + numNew); //擴容
System.arraycopy(a, 0, elementData, elementCount, numNew); //追加集合。
elementCount += numNew;
return numNew != 0;
}
看一下移除的方法 峻呕。
public synchronized void removeElementAt(int index) {
modCount++;
if (index >= elementCount) { // 越界檢查
throw new ArrayIndexOutOfBoundsException(index + " >= " +
elementCount);
}
else if (index < 0) {
throw new ArrayIndexOutOfBoundsException(index);
}
int j = elementCount - index - 1;
if (j > 0) {
System.arraycopy(elementData, index + 1, elementData, index, j); //從Index 開始利职,前移一個單位 。
}
elementCount--;
elementData[elementCount] = null; // 回收瘦癌。
}
其它可以自行分析吧猪贪,比較簡單 ,
小結(jié):
1.Vector實現(xiàn)了List<E>, RandomAccess, Cloneable, java.io.Serializable接口讯私。
2.Vector也同樣采用了數(shù)組的儲存方式热押,這一點和ArrayList是一樣的西傀。
3.Vector與ArrayList不同的是,所有方法都加上了synchronized同步關(guān)鍵詞桶癣, 所以Vector是線程安全的拥褂,不過也一般比較少用, 一般都采用線程安全的CopyOnWriteArrayList牙寞。