web-dev-qa-db-ja.com

ベクトルをリストに変換

ベクトルをリストに変換する方法は?

25
sarah

VectorList インターフェースを実装する具象クラスなので、技術的にはすでにListです。あなたはこれを行うことができます:

List list = new Vector();

または:

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

Vector of Stringsと仮定)。

ただし、それを ArrayList に変換する場合、これは、Javaの `Vector〜に最も近いList実装です=コレクションフレームワークは、次のようにします。

List newList = new ArrayList(vector);

または、ジェネリックバージョンの場合、VectorStringsであると仮定します。

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

一般的な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) );

リストを変更する必要がある場合。オフカフの可変ラッパーは次のとおりです。

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