toArrayの使い方

1168 ワード

JavaではtoArrayには2つの方法があります.
public Object[] toArray()

public <T> T[] toArray(T[] a)

2つの質問:
1.どんな違いがありますか.
2.どのように使いますか.
 
違いは前者はClassCastExceptionが発生し、後者は発生しません.どうしてですか.
 
ソースコードを見てみましょう.
    public Object[] toArray() {
        return Arrays.copyOf(elementData, size);
    }
 
    public <T> T[] toArray(T[] a) {
        if (a.length < size)
            // Make a new array of a's runtime type, but my contents:
            return (T[]) Arrays.copyOf(elementData, size, a.getClass());
	System.arraycopy(elementData, 0, a, 0, size);
        if (a.length > size)
            a[size] = null;
        return a;
    }

コードを見るとわかりますが、後者は結果を生成する前に、実行タイプの配列をコピーします.
 
最後に使い方をご紹介します.
1. Long[] l = new Long[<total size>];
list.toArray(l);

2. Long[] l = (Long[]) list.toArray(new Long[0]);

3. Long[] a = new Long[<total size>];
Long[] l = (Long[]) list.toArray(a);