将向量转换为列表。

26

如何将向量转换为列表?


8
"Vector" 是 "List" 的一种,不需要转换。你想实现什么目标? - skaffman
2个回答

46

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

List list = new Vector();

或者:

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

(假设有一个字符串的向量Vector)。
如果你想将它转换为ArrayList,它是Java集合框架中最接近VectorList实现,只需执行以下操作:
List newList = new ArrayList(vector);

或者对于一个通用版本,假设有一个 StringVector

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

2
这同样适用于反向操作,例如 Vector newVector<String> = new Vector<String>(someStringArrayList); - StockB

4
如果您需要一个将通用的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);
}

但是像下面有人提到的那样,一个向量是一个列表!那么你为什么需要这样做呢?也许你不想让你使用的某些代码知道它正在使用一个向量 - 也许它在不合适地向下转换,你希望消除这种代码气味。你可以使用

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

如果需要修改List,则可以使用一个即兴可变的包装器:

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); }
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接