将矢量转换为列表

时间:2009-12-29 09:22:23

标签: java list vector

如何将矢量转换为列表?

2 个答案:

答案 0 :(得分:42)

Vector是一个实现List接口的具体类,所以从技术上讲它已经是List。你可以这样做:

List list = new Vector();

或:

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

(假设VectorString s。。

但是,如果你想将它转换为ArrayList,这是Java Collections Framework中与`Vector~最接近的List实现,那么就这样做:

List newList = new ArrayList(vector);

或通用版本,假设VectorString s:

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

答案 1 :(得分:3)

如果需要将通用Vector类型转换为适当的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(Enumeration),如下所示:

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

但是就像下面提到的那样,Vector就是一个列表!那你为什么要这么做呢?也许你不希望你使用的某些代码知道它正在使用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); }
    }
}