将矢量转换为列表
如何将矢量转换为列表?
Vector
是一个实现List
接口的具体类,因此从技术上讲,它已经是一个.您可以执行以下操作:List
List list = new Vector();
艺术
List<String> list = new Vector<String>();
(假设 a 为 s)。Vector
String
但是,如果您想将其转换为ArrayList
,这是Java集合框架中最接近“Vector~”的实现,那么只需执行以下操作:List
List newList = new ArrayList(vector);
或对于通用版本,假设 a 为 s:Vector
String
List<String> newList = new ArrayList<String>(vector);
如果需要一个实用程序方法将泛型 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一起工作 - 也许它不恰当地向下转换,你希望消除这种代码气味。然后,您可以使用
// 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); }
}
}