개발 지식/Java

[Java] 배열과 List 사이의 변환

서하빈 2023. 11. 15. 12:10

배열 -> List

- 아래의 1번과 2번 방식에서 Arrays.asList를 List.of로 변경하여도 동작하지만 조금의 차이가 발생한다.

- 둘의 차이점은 아래의 글에 정리해두었다.

https://prospective-developer-seo.tistory.com/111

 

[Java] Arrays.asList()와 List.of()의 차이

공통점 - 매개변수로 가변인자를 받아서(여러 요소나 배열도 가능) list를 반환한다. - 리스트의 크기를 변경할 수 없다. 차이점 변경 가능 여부 - Arrays.asList()로 반환된 list는 변경이 가능하지만 Li

prospective-developer-seo.tistory.com

 

1. Arrays.asList(array)

- 이 경우 고정길이의 List가 반환되고 원본 배열의 변경이 List에 영향을 미치게 된다.

 

2. new ArrayList<>(Arrays.asList(array))

- 원본 배열에 영향이 가지 않으며 List의 길이 변환이 가능하다.

 

3. Stream.of(array).collect(Collectors.toList())

- Java 8 버전 이후부터는, Stream을 이용하여 배열을 List로 변화할 수 있고, 이 역시 원본 배열과 독립적이며 길이 변환도 가능하다.

 

 

예외 - 배열의 원소가 primitive type인 경우

- 이 경우에 Arrays.asList 또는 List.of를 사용하면 가변인자가 배열 자체를 하나의 인자로 보고 의도하지 않은 결과가 나오게 된다.

int[] arr = {1, 2, 3};
List<int[]> intList = Arrays.asList(arr);

- 그 이유는 Arrays.asList와 List.of 메서드가 primitive 타입을 Wrapper 클래스로 형변환해주지 않기 때문이다.

 

해결방안

1. 반복문 사용하기

2. Stream 사용하기

int[] arr = {1, 2, 3};
List<Integer> intList = Arrays.stream(arr).boxed().collect(Collectors.toList());

 

 

List -> 배열

1. toArray()

List<Integer> list = new ArrayList<>(List.of(1, 2, 3, 4));
Integer[] arr = list.toArray(new Integer[list.size()]);

- toArray의 인자로 아무것도 넣지 않으면 Object타입의 배열이 생성된다.

- 또한 인자로 넘겨준 배열의 크기가 원본 리스트보다 작은 경우 자동으로 원본 리스트의 크기로 배열을 생성해준다.

 

 

참고 자료

https://hianna.tistory.com/551

 

[Java] 배열을 List로, List를 배열로 변환하기

배열을 List로 Arrays.asList() new ArrayList(Arrays.asList()) Collectors.toList() ArrayList를 배열로 toArray() - java.util.List 배열을 List로 1. Arrays.asList() 코드 import java.util.Arrays; import java.util.List; public class ArrayConversion

hianna.tistory.com

 

https://hianna.tistory.com/552

 

[Java] int 배열을 List로 변환하기

지난번에는 배열을 List로 변환하는 방법을 알아보았습니다. [Java] 배열을 List로, List를 배열로 변환하기 [Java] 배열을 List로, List를 배열로 변환하기 배열을 List로 Arrays.asList() new ArrayList(Arrays.asList(

hianna.tistory.com