[Java] 배열과 리스트 사이의 변환 방법들 ( feat. Arrays.asList() )
배열을 리스트로 변환하는 방법은 크게 두 가지로 나뉜다.
1-1. '객체' 배열인가? [ 배열 ☞ 리스트 ]
만약 '객체' 배열을 리스트로 변환하려면 다음과 같은 방법들이 있다.
- Arrays.asList( ) 사용
: Arrays 클래스의 정적 메서드인 asList( ) 를 이용한다. 반환 타입은 List 형이다.
asList( ) 는 크기가 정적인 리스트를 반환하기 때문에 값 변경은 가능하지만, 리스트 사이즈를
바꿀 수 없다. 리스트 사이즈를 변경하는 add, remove 메서드를 사용하면 예외가 발생한다.
배열과 리스트가 동기화 됐기 때문에 리스트의 값을 변경하면 원본 배열의 값도 변한다.
String[] arr = { "A", "B", "C" };
List<String> list = Arrays.asList(arr);
- new ArrayList < > ( Arrays.asList( ) ) 사용
: 원본 배열의 값과 변환 된 리스트의 값이 동기화 되는 것을 막기 위해서, Arrays.asList( ) 로
변환된 리스트를 통해 새로운 ArrayList 객체를 생성하면 크기의 변화에 문제가 없다.
즉, 먼저 Arrays.asList( ) 로 배열을 리스트로 변환한 결과를 ArrayList 의 생성자로 전달해서
새로운 ArrayList 를 만드는 것이다. 따라서 동기화도 이뤄지지 않아 원본 데이터의 변경도 없다.
String[] arr = { "A", "B", "C" };
List<String> list = new ArrayList<>(Arrays.asList(arr));
1 - 2. '객체' 배열인가? [ 리스트 ☞ 배열 ]
- toArray( ) 사용
: List 인터페이스의 인스턴스 메서드인 toArray( ) 를 통해서 리스트를 배열로 바꿀 수 있다.
toArray( ) 메서드의 매개변수에 아무것도 넣지 않으면 Object [ ] 이 생성된다. 그러나 원하는
참조형이 있다면 매개변수에 해당 참조형의 배열 객체를 생성한다. 크기는 0 으로 하면 된다.
ArrayList<String> arrList = new ArrayList<String>();
String arr[] = arrList.toArray(new String[0]);
2. 원시형(Primitive) 배열인가? [ 배열 ☞ 리스트 ] && [ 리스트 ☞ 배열 ]
만약 배열이 원시형 타입이라면( int, double, float 등 ), 위와 같은 방법으로 리스트로 변환할 수 없다. Arrays.asList( ) 메서드는 원시형 타입을 Wrapper 클래스로 자동 형변환을 지원하지 않는다. 따라서 int 형 배열을 Integer 형으로 변환이 되지 않는다.
- for 문 사용
따라서 원시형 배열에서 리스트로, 또는 리스트에서 원시형 배열로 변환하는 방법은 'for 문'을 통한 전환이 있다. 반복문을 통해 하나씩 대입하면 자동 형변환이 이뤄지기 때문에 가능하다.