Quantcast
Channel: 配列タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 841

Java ArrayListを配列に変換する

$
0
0

ArrayListを配列に変換する方法と注意点

ListToArray.java
//ArrayList生成ArrayList<String>arrayList=newArrayList<String>();arrayList.add("A");arrayList.add("B");arrayList.add("C");String[]array=(String[])arrayList.toArray();System.out.println("ArrayList = "+arrayList.toString());System.out.println("配列 = "+Arrays.toString(array));

結果(NG)

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;

なぜか

返すクラスを取得してみる

ListToArray.java
//ArrayList生成//中略System.out.println(arrayList.toArray().getClass());

結果

class [Ljava.lang.Object;

Object型配列が返ってきてる。。。

修正

ListToArray.java
//ArrayList生成//中略//配列の要素数に0またはarrayList.size()を入れるString[]array=arrayList.toArray(newString[arrayList.size()]);//String[] array = arrayList.toArray(new String[0]);System.out.println("ArrayList = "+arrayList.toString());System.out.println("配列 = "+Arrays.toString(array));

結果(OK)

ArrayList = [A, B, C]
配列 = [A, B, C]

調査

ArrayList.class
public<T>T[]toArray(T[]a){if(a.length<size)return(T[])Arrays.copyOf(elementData,size,a.getClass());System.arraycopy(elementData,0,a,0,size);if(a.length>size)a[size]=null;returna;}

System.arraycopy(elementData, 0, a, 0, size);
String[]をそのままコピーしていた。

ちなみに

toArrayの引数に指定できるのは変換元のArrayListでしている型のみ
違うクラスをしていするとコンパイルエラーになる。


Viewing all articles
Browse latest Browse all 841

Trending Articles