안녕하세요. hia의 개발 story입니다.
일도 하고 공부도 하려니 자꾸 미루는 거 같네요.
그래도 꾸준히 알고리즘 문제는 풀고 있는데 문제를 풀 때마다 늘 헷갈리는 부분이 있어서 정리하려고 합니다.
한번 정리를 해두면 기억에 잘 남으니까요 ㅎㅎ
알고리즘 문제를 풀다보면 답은 배열로 제출해야 하지만 실제로 문제에서는 List를 써야 할 때가 많아요.
그래서 오늘은 그 방법을 좀 정리해보려고 합니다.
List를 배열로 변환해보자.
1. toArray()
List의 타입을 객체로 지정했을 때는 toArray()를 이용해서 변환 가능합니다.
변환할 객체와 동일한 객체를 새로 선언해서 매개변수로 넣어주면 됩니다.
List<String> list = new ArrayList<>();
list.add("String");
String[] str_arr = list.toArray(new String[list.size()]);
2. int 배열 변환하기 - stream().mapToInt()
이렇게 쉬운 방법이 있지만 List의 제네릭 타입이 Integer면 객체가 아니기 때문에 사용이 어렵습니다.
그럴때 사용할 수 있는 방법은 stream입니다.
아래와 같은 방식으로 쉽게 변경이 가능합니다.
List<Integer> list = new ArrayList<>();
list.add(1);
int[] int_arr = list.stream().mapToInt(i->i).toArray();
3. 반복문으로 직접 넣어주기
이런저런 방법이 싫고 가장 직관적으로 변경 가능한 것은 반복문을 사용하는 것입니다.
List<Integer> list = new ArrayList<>();
list.add(1);
int[] int_arr = new int[list.size()];
for(int i = 0; i < list.size(); i++){
int_arr[i] = list.get(i);
}
배열을 List로 변환해 보자.
글을 쓴 이유는 List를 배열로 바꾸기 위해서였지만 반대로 변환하는 방법도 같이 정리할게요.
1. Arrays.asList()
java.util.Arrays 클래스에서 제공하는 Arrays.asList()를 사용할 수 있습니다.
String[] str_arr = {"String"};
List<String> list = Arrays.asList(str_arr);
2. int 배열을 List로 - Arrays.stream()을 이용
마찬가지로 int 배열을 asList()를 이용해서 변환하려고 하면 오류가 발생합니다.
왜냐하면 List에 제네릭은 Integer로 되어있기 때문에 형변환이 안됩니다.
이를 해결해 주는 게 stream().boxed() 입니다.
int[] int_arr = {1,2};
List<Integer> list = Arrays.stream(int_arr).boxed().collect(Collectors.toList());
더 다양한 방법이 있지만 이 정도까지만 정리하도록 하겠습니다.