2009-12-29 22 views

Respuesta

39

Vector es una clase concreta que implementa la interfaz List por lo que técnicamente ya es un List. Usted puede hacer esto:

List list = new Vector(); 

o:

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

(suponiendo una Vector de String s).

Sin embargo, si desea convertirlo en un ArrayList, que es el List aplicación más parecido a un `~ vectorial en el marco de las colecciones de Java a continuación, sólo hacer esto:

List newList = new ArrayList(vector); 

o para una versión genérica, asumiendo un Vector de String s:

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

Esto también parece ser cierto para el inverso, p. Ej. 'Vector newVector = nuevo Vector (someStringArrayList);' – StockB

2

Si quieres un método de utilidad que convierte un tipo de vector genérico para un ArrayList apropiada, usted podría utilizar el siguiente:

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

En su código, se utiliza el método de utilidad de la siguiente manera:

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

También puede utilizar el incorporado en java.util.Collections.list (Enumeración) de la siguiente manera:

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

Pero, como alguien menciona a continuación, ¡un Vector es-una Lista! Entonces, ¿por qué tendrías que hacer esto? Tal vez no desee un código que use para saber que está trabajando con un vector; quizás esté realizando un down-casting indebidamente y desea eliminar este código-olor. A continuación, puede utilizar

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

si la lista debe modificarse. Una envoltura mutable fuera del manguito es:

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