Java

[Java] List를 Array로, Array를 List로 변환하기

Jenny376 2023. 8. 2. 23:08
안녕하세요. 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());

 

더 다양한 방법이 있지만 이 정도까지만 정리하도록 하겠습니다.