java.util.Vector 是一個同步化的動態陣列實作,適用於需要執行緒安全的集合場景。雖然 ArrayList(非同步)執行速度較快,但 Vector 在多執行緒環境下提供穩定與安全保障,仍是常見選擇。
Vector<E> 實作 List<E> 介面,主要方法分類如下:
boolean add(E o):將指定元素附加至向量末尾void add(int index, E element):在指定位置插入元素boolean addAll(Collection<? extends E> c):依集合迭代器順序將所有元素附加至末尾boolean addAll(int index, Collection<? extends E> c):在指定位置插入集合所有元素void addElement(E obj):將組件添加至末尾,大小增加 1(舊版方法)int capacity():返回當前容量void ensureCapacity(int minCapacity):必要時增加容量以確保至少能容納指定組件數void setSize(int newSize):設定向量大小void trimToSize():微調容量使其等於當前大小E elementAt(int index):返回指定索引處組件E get(int index):返回指定位置元素E firstElement():返回第一個組件(索引 0)E lastElement():返回最後一個組件Enumeration<E> elements():返回組件枚舉int indexOf(Object elem):搜尋第一個匹配項(用 equals 測試)int indexOf(Object elem, int index):從指定索引開始搜尋第一個匹配項int lastIndexOf(Object elem):返回最後一個匹配項索引int lastIndexOf(Object elem, int index):從指定索引向前搜尋E remove(int index):移除指定位置元素boolean remove(Object o):移除第一個匹配項boolean removeAll(Collection<?> c):移除包含於指定集合的所有元素void removeAllElements():移除所有組件,大小設為零boolean removeElement(Object obj):移除第一個(索引最小)匹配項void removeElementAt(int index):刪除指定索引組件protected void removeRange(int fromIndex, int toIndex):移除索引範圍內元素E set(int index, E element):用指定元素替換指定位置元素void setElementAt(E obj, int index):設定指定索引處組件boolean contains(Object elem):測試指定物件是否為向量組件boolean containsAll(Collection<?> c):包含指定集合所有元素返回 truevoid copyInto(Object[] anArray):將組件複製至指定陣列Object clone():返回向量副本boolean equals(Object o):比較指定物件與向量相等性int hashCode():返回雜湊碼值boolean isEmpty():測試向量是否不包含組件boolean retainAll(Collection<?> c):僅保留包含於指定集合的元素int size():返回組件數List<E> subList(int fromIndex, int toIndex):返回部分視圖(fromIndex 含、toIndex 不含)Object[] toArray():返回包含所有元素的陣列<T> T[] toArray(T[] a):返回指定執行時期類型陣列String toString():返回字串表示(含每個元素字串表示)Vector 同步化、ArrayList 非同步化。ArrayList 執行速度較快,但 Vector 在多執行緒環境下更穩定安全。單執行緒或已有外部同步機制時,優先考慮 ArrayList 或 Collections.synchronizedList。
import java.util.*;
public class Test {
public static void main(String args[]) {
Vector vecFields = new Vector();
String goods_name = "aaaaa";
vecFields.addElement(new Field("goods_name", goods_name));
vecFields.addElement(new Field("goods_test", "bbbbbb"));
vecFields.addElement("string_test_sample");
System.out.println(vecFields.size()); // 顯示長度(此處為 3)
Field field = (Field) vecFields.elementAt(0);
System.out.println(field.getFieldName() + ": " + field.getFieldValue());
field = (Field) vecFields.elementAt(1);
System.out.println(field.getFieldName() + ": " + field.getFieldValue());
System.out.println(vecFields.elementAt(2));
}
}
class Field {
private String fieldName;
private String fieldValue;
public Field(String fieldName, String fieldValue) {
this.fieldName = fieldName;
this.fieldValue = fieldValue;
}
public String getFieldName() { return this.fieldName; }
public String getFieldValue() { return this.fieldValue; }
}
執行結果:
3 goods_name: aaaaa goods_test: bbbbbb string_test_sample
範例展示 Vector 可儲存異質物件(Field 實例與 String),透過 elementAt() 取得元素並強制轉型使用。注意:Vector 不支援泛型類型安全(舊版 API),實際開發建議優先使用 ArrayList<T> 搭配外部同步或 CopyOnWriteArrayList。