toArray(), toArray(T[] a) 메소드는 컬렉션을 배열로 변환해주는 메소드입니다.
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
Object[] toArray = list.toArray();
System.out.println("toArray = " + Arrays.deepToString(toArray));
toArray()는 Object 배열로 변환해줍니다.
만약에 Object가 아닌 다른 클래스 배열로 변환하고자 한다면 toArray(T[] a) 메소드를 사용하면 됩니다.
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
String[] toArray = list.toArray(new String[list.size()]);
System.out.println("toArray = " + Arrays.toString(toArray));
String 리스트를 String 배열로 변환하는 코드입니다.
당연하겠지만 변환하고자 하는 배열 타입과 컬렉션의 타입이 일치해야 합니다.
아니면 에러가 발생합니다.
Integer[] toArray1 = list.toArray(new Integer[list.size()]);
System.out.println("toArray = " + Arrays.toString(toArray1));
arraycopy: element type mismatch: can not cast one of the elements of java.lang.Object[] to the type of the destination array, java.lang.Integer 라는 에러 메시지와 함께 에러가 발생합니다.
toArray 메소드로 생성된 배열은 새로운 배열입니다.
어디에도 참조되지 않습니다.
그래서 toArray 메소드로 생성된 배열은 마음대로 가공해도 됩니다.
그리고 위의 예제에서는 T[] a 매개변수에 배열 크기를 지정해주었는데, 배열 크기를 0으로 해도 됩니다.
String[] toArray = list.toArray(new String[0]);
System.out.println(Arrays.toString(toArray));
크기를 0으로 지정하는게 성능이 좀더 좋다고 합니다.(출처)