본문 바로가기
Java

List(리스트)를 Array(배열)로 변환 방법

by jayden-lee 2019. 4. 11.
728x90

List(리스트)를 Array(배열)로 변경할 때 사용하는 메서드로는 toArray()가 있다. toArray() 메서드 종류는 2가지가 있다.

 

첫 번째는 반환값이 T[]이고, 두 번째는 반환값이 Object[]이다.

 

T[] 배열 반환하는 toArray(T[] a) 메서드
Object[] 배열을 반환하는 toArray() 메서드

 

toArray(T[] a), toArray() 메서드의 차이점은 반환값이 다르다.

제네릭을 사용한 메서드는 런타임에 자료형 값을 이용하기 때문에 String 리스트를 이용할 경우에 String[] 배열이 반환된다. 그러므로 배열을 사용할 때 자료형 변환을 할 필요가 없다.

 

하지만, Object[] 배열을 반환하는 toArray() 메서드는 배열을 사용할 때 필요한 자료형으로 변환해서 사용해야 한다.

public class ListToArrayMain {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("123");
        list.add("456");
        list.add("789");

        String[] strArray = list.toArray(new String[0]);
        Object[] objArray = list.toArray();
    }
}

위 코드에서 list.toArray(new String[0]) 부분에서 String 배열의 크기(size)값이 0인 것을 확인할 수 있다. 리스트의 요소는 3개이므로 당연히 3을 전달해야 한다고 생각할 수 있다.

 

toArray(T[] a) 메서드 내부를 살펴보면 파라미터로 넘어온 배열의 크기를 확인하고 리스트 크기보다 작을 때, List 크기를 기준으로 배열을 생성하게 된다. 인자로 넘어가는 배열의 크기가 리스트의 크기보다 큰 경우에는 인자로 넘어가는 배열의 크기만큼 배열이 생성된다. 실수로 큰 값을 전달하면 배열의 크기가 커진다. 리스트의 크기만큼 배열을 생성하기 위해서 0을 전달한다.

public class ListToArrayMain {

    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("123");
        list.add("456");
        list.add("789");

        String[] strArray = list.toArray(new String[0]);

        // 3 출력
        System.out.println(strArray.length);

        String[] strArray2 = list.toArray(new String[6]);

        // 6 출력
        System.out.println(strArray2.length);
    }
}

ArrayList toArray 메서드

댓글