2009-12-29 90 views

回答

39

Vector是一個實現List接口的具體類,因此在技術上它已經是List。你可以這樣做:

List list = new Vector(); 

或:

List<String> list = new Vector<String>(); 

(假設StringVector S)。

然而,如果你想將它轉換爲ArrayList,這是最接近List落實到`矢量〜在Java集合框架則只是這樣做:

List newList = new ArrayList(vector); 

或仿製,假設StringVector S:

List<String> newList = new ArrayList<String>(vector); 
+2

對於反例,這也是正確的。 'vector newVector =新的矢量(someStringArrayList);' – StockB 2012-08-21 14:29:36

2

如果你想有一個通用矢量型轉換爲相應的ArrayList的實用方法,你可以使用以下命令:

public static <T> ArrayList<T> toList(Vector<T> source) { 
    return new ArrayList<T>(source); 
} 

在代碼中,你可以使用工具方法如下:

public void myCode() { 
    List<String> items = toList(someVector); 
    System.out.println("items => " + items); 
} 

您還可以使用內置的java.util.Collections.list(枚舉)如下:

public void myMethod() { 
    Vector<String> stringVector = new Vector<String>(); 
    List<String> theList = Collections.list(stringVector.elements()); 
    System.out.println("theList => " + theList); 
} 

但是就像下面提到的某個人,一個向量是一個列表!那麼爲什麼你需要這樣做呢?也許你不想讓你使用一些代碼來知道它與Vector的工作 - 也許這是不恰當的下調,你希望消除這種代碼味道。您可以使用

// the method i give my Vector to can't cast it to Vector 
methodThatUsesList(Collections.unmodifiableList(theVector)); 

如果應該修改列表。一個無袖可變包裝是:

public static <T> List<T> asList(final List<T> vector) { 
    return new AbstractList<T>() { 
     public E get(int index) { return vector.get(index); } 
     public int size() { return vector.size(); } 
     public E set(int index, E element) { return vector.set(index, element); } 
     public void add(int index, E element) { vector.add(index, element); } 
     public E remove(int index) { return vector.remove(index); } 
    } 
}