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でしている型のみ
違うクラスをしていするとコンパイルエラーになる。