728x90
List(리스트)를 Array(배열)로 변경할 때 사용하는 메서드로는 toArray()
가 있다. toArray() 메서드 종류는 2가지가 있다.
첫 번째는 반환값이 T[]
이고, 두 번째는 반환값이 Object[]
이다.
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);
}
}
'Java' 카테고리의 다른 글
Java Map 컬렉션(Collection) 개념 및 종류 (0) | 2019.04.11 |
---|---|
쓰레드(Thread) 종료 방법 stop 플래그, interrupt() (0) | 2019.04.11 |
Effective Java 아이템 15. 클래스와 멤버의 접근 권한을 최소화하라 (0) | 2019.04.11 |
Effective Java 아이템 14. Comparable을 구현할지 고려하라 (0) | 2019.04.08 |
Effective Java 아이템 13. clone 재정의는 주의해서 진행하라 (0) | 2019.04.08 |
댓글