Java 배열과 List<T> 컬렉션 간 변환하기
Convert between Array and List in Java
알고리즘 문제를 보면 int[]
또는 char[]
와 같은 Arrays 타입이 자주 등장합니다. 실제 업무에서는 주로 Java의 Collections Framework 및 Stream API를 활용해서 그런지 현실과의 간격이 조금 발생하는 것 같습니다. 알고리즘 대회에 나갈 것이 아니다 보니...🙄
이번 포스팅에서는 Java의 Arrays을 List<T>
로, List<T>
를 다시 Arrays로 변환하는 방법에 대해 살펴봅니다.
Prerequisite
Java 17을 기반으로 하며, 타입 변환하는 방법이 많겠지만 주로 Stream API를 활용하였습니다.
Converting int Array ⇆ List of Integer
int[]
와 List<Integer>
를 서로 변환합니다.
int Array → List of Integer
int[]
를 List<Integer>
로 변환합니다.
int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
List<Integer> list = Arrays.stream(array)
.boxed()
.toList();
Arrays.stream(T[] array)
: 파라미터로 전달된 배열을 기반으로IntStream
으로 변환하여 반환합니다.boxed()
:int
타입을Integer
타입으로 감싼 다음Stream
타입으로 반환합니다.toList()
: Stream 요소들을 모아List<T>
타입으로 반환합니다.
List of Integer → int Array
List<Integer>
를 int[]
로 변환합니다.
List<Integer> list = List.of(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
int[] array = list.stream()
.mapToInt(Integer::intValue)
.toArray();
mapToInt()
:IntStream
을 반환합니다.toArray()
:Stream
요소들을 배열에 담아 반환합니다.
Converting String Array ⇆ List of String
String[]
와 List<String>
을 서로 변환합니다.
String Array → List of String
String[]
를 List<String>
으로 변환합니다.
String[] array = {"A", "B", "C", "D"};
List<String> list = Arrays.stream(array).toList();
List of String → String Array
List<String>
을 String[]
로 변환합니다.
List<String> list = List.of("A", "B", "C", "D");
String[] array = list.toArray(new String[0]);
new String[list.size()]
: 배열을 생성할 때, 배열의 사이즈를 지정하는 것이 일반적입니다. 하지만 JVM 최적화 측면에서new String[0]
을 사용하는 것이 더 효과적이다고 합니다.
Converting char Array ⇆ List of String
char[]
와 List<String>
을 서로 변환합니다.
char Array → List of String
char[]
를 List<String>
으로 변환합니다.
char[] array = {'a', 'b', 'c', 'd'};
List<String> list = new String(array)
.chars()
.mapToObj(Character::toString)
.toList();
List of String → char Array
List<String>
을 char[]
로 변환합니다.
List<String> list = List.of("A", "B", "C", "D");
char[] chars = list.stream()
.collect(Collectors.joining())
.toCharArray();
- Java
- Algorithm