[코딩테스트] 배열과 리스트 변환
배열과 리스트는 Java에서 자주 사용되는 자료구조이며, 필요에 따라 서로 변환해야 하는 경우가 많습니다. 여기서는 배열을 리스트로 변환하는 방법과 리스트를 배열로 변환하는 방법을 각각 살펴보겠습니다.
1-1. 배열을 리스트로 변환
new ArrayList<>(Arrays.asList()) 사용 (가변 리스트)
리스트에 요소 추가/삭제가 필요한 경우
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
String[] array = {"a", "b", "c"};
// 배열 → 리스트 변환 (가변 리스트)
List<String> list = new ArrayList<>(Arrays.asList(array));
list.add("d"); // 정상 동작
System.out.println(list); // [a, b, c, d]
}
}
1-2. 리스트를 배열로 변환
리스트를 배열로 변환하는 방법에는 여러 가지가 있으며, 주로 toArray() 메서드를 활용합니다.
(1) toArray()를 사용한 변환 (Object[], T[] 변환)
toArray()에는 두 가지 형태가 있습니다.
(1-1) toArray() 사용 (Object[] 반환)
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> list = Arrays.asList("Apple", "Banana", "Cherry");
// 리스트를 Object 배열로 변환
Object[] array = list.toArray();
System.out.println(Arrays.toString(array)); // [Apple, Banana, Cherry]
}
}
특징
• toArray()는 기본적으로 Object[] 배열을 반환합니다.
• 만약 String[]으로 변환해야 한다면, toArray(new String[0])을 사용해야 합니다.
(1-2) toArray(T[] a) 사용 (특정 타입 배열 반환)
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> list = Arrays.asList("Apple", "Banana", "Cherry");
// 리스트를 String 배열로 변환
String[] array = list.toArray(new String[0]);
System.out.println(Arrays.toString(array)); // [Apple, Banana, Cherry]
}
}
특징
• new String[0]을 전달하면 String[] 타입의 배열이 반환됩니다.
• 리스트 크기에 맞게 자동으로 배열이 생성됩니다.
(2) Stream API를 활용한 변환 (toArray(T[]::new))
Java 8 이상에서는 Stream API를 사용해 변환할 수 있습니다.
import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
List<String> list = Arrays.asList("Apple", "Banana", "Cherry");
// Stream API를 사용하여 변환
String[] array = list.stream().toArray(String[]::new);
System.out.println(Arrays.toString(array)); // [Apple, Banana, Cherry]
}
}
특징
• String[]::new을 사용하면 리스트 크기에 맞는 배열이 자동 생성됩니다.
• toArray(new String[0])과 동일한 역할을 합니다.
(3) mapToInt(Integer::intValue).toArray()를 활용한 변환 (기본형 배열 변환)
일반적인 toArray()는 Integer[] 객체 배열을 반환하지만, 기본형 int[] 배열이 필요할 경우 mapToInt()를 사용해야 합니다.
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(10, 20, 30, 40, 50);
// List<Integer> → int[] 변환
int[] array = list.stream().mapToInt(Integer::intValue).toArray();
System.out.println(Arrays.toString(array)); // [10, 20, 30, 40, 50]
}
}
특징
• mapToInt(Integer::intValue)를 사용하여 Integer → int 변환을 수행합니다.
• toArray()를 사용하여 int[] 배열을 생성합니다.
정리
변환 유형 | 방법 | 코드 |
배열 -> 리스트 | Arrays.asList() | List<String> list= Arrays.asList(arr); |
new ArrayList<>(Arrays.asList()) | List<String> list = new ArrayList<>(Arrays.asList(arr)); | |
Stream.of().collect(Collectors.toList()) | List<String> list = Stream.of(arr).collect(Collectors.toList()); | |
리스트 -> 배열 | toArray() | Object[] arr = list.toArray(); |
toArray(T[]::new) | String[] arr = list.stream().toArray(String[]::new); | |
리스트 -> 기본형 배열 | mapToInt().toArray() | int[] arr = list.stream().mapToInt(Integer::intValue).toArray(); |
+int 배열을 List<Integer>로 변환하는 방법
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5};
// int[] → List<Integer> 변환
List<Integer> list = Arrays.stream(arr)
.boxed() //int -> Integer
.collect(Collectors.toList());
System.out.println(list); // [1, 2, 3, 4, 5]
}
}
Java 16 이상: toList()
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
int[] a = {1, 2, 3, 4, 5};
// Java 16 이상에서 사용 가능
List<Integer> test = Arrays.stream(a).boxed().toList();
System.out.println(test); // [1, 2, 3, 4, 5]
}
}