List.toArray()/toArray(T []arg0) - Listから配列への変換例

2010/06/09 18:25Update
TAGS: List | ArrayList | コレクション | リスト | 配列 | toArray | 変換 | Java

リストなどのコレクションを配列に変換したい場合はあります。方法としては、for文を使って各要素を取り出してから配列にセットするかList.toArray()メソッドを利用するなどの方法があります。

例:
List list = new ArrayList();
list.add("a");
list.add("b");
list.add("c");


方法1の場合
String [] arr = new String[list.size()];
for (int i=0; i<list.size(); i++) {
    String ele = (String)list.get(i);
    arr[i] = ele;
}


方法2の場合
String [] arr = list.toArray(new String[0]);
//String [] arr = list.toArray(new String[list.size()]);


リストの要素は確定できない場合
Object [] arr = list.toArray();


パラメータのあるlist.toArrayメソッドの形は以下のようになります。
T[] toArray(T []arg0)


パラメータ T []arg0 は配列の形になっていますが、利用する際、
SomeType [] arr = list.toArray(new SomeType[0]);


SomeType [] arr = list.toArray(new SomeType[list.size()]);

どちらでもいいらしい。

java.util.Listの実装クラスの一つjava.util.ArrayListを覗いてみると、以下のような定義になっています。
    public Object[] toArray(Object aobj[])
    {
        if(aobj.length < size)
            aobj = (Object[])(Object[])Array.newInstance(((Object) (aobj)).getClass().getComponentType(), size);
        System.arraycopy(((Object) (elementData)), 0, ((Object) (aobj)), 0, size);
        if(aobj.length > size)
            aobj[size] = null;
        return aobj;
    }

見れば分かると思いますが、パラメータに指定する配列のサイズは リストのサイズにより小さかった場合、配列をリサイズしているように見えます。

なので、list.toArray(new SomeType[list.size()])のほうは実行速度は小さいながら速いです。

有关作者
Syboos.jp編集長システム設計や開発、保守運営などを行ってます。オープンソース技術に興味があります。

Sponsored Link


Comments