2009-12-29 107 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); } 
    } 
}