Listと配列のかなり勘違い
JavaでListとかのコレクションを配列に変換するロジックって、
- Collection#toArray()
- Collection#toArray(Object[])
の二つがあるんですが、前者は特定の型に変換する必要がない(つまりObjectのまま扱う)場合に使用し、後者は逆に、特定の型に変換する必要がある場合に遣います。
で、よく後者のメソッドを使っていたのですが、引数に渡す配列って、Listのサイズ分の配列を確保する必要ないんですね。かなぁり勘違いしてました(T_T)
引数のObjectは、型情報を与えるだけで、結果を格納する参照は、また別にあるそうです。APIリファレンスにもきっちり書いてありました。一応検証コード書いたので、載せてみます。
import java.util.ArrayList; import java.util.List; /** * List → 配列に変換するテスト * * (実行結果例) * aaa * 123 * --- * aaa * 123 * --- * aaa * 123 */ public class ListToArray { public static void main(String[] args) { List lst = new ArrayList(); lst.add("aaa"); lst.add("123"); String[] array = null; // (誤り)配列をリストのサイズ分用意 String[] array1 = new String[lst.size()]; array = (String[])lst.toArray(array1); printArray(array); // (正しい)配列は型情報の意味として与える String[] array2 = new String[0]; array = (String[])lst.toArray(array2); printArray(array); // (正しい)上の省略形 array = (String[])lst.toArray(new String[0]); printArray(array); } private static void printArray(String[] array) { System.out.println("---"); for(int i=0; i<array.length; i++) { System.out.println(array[i]); } } }
→勘違いでもなかったっぽいです。
http://d.hatena.ne.jp/taka_2/20050811#p1