개요
프로그래머스에서 자바로 코딩 테스트를 시작했다.
그런데 백준과 다르게 프로그래머스는 입출력을 직접 하는 대신에
매개변수로 입력을 받고, 반환값으로 출력을 대신했다.
여기서 큰 충격을 받았지만,
더 큰 문제는 그게 자바에서는 고정된 크기의 자료형인 int[] 배열이나 String이라는 점이다....
그래서 크기를 마음대로 변경할 수 있는 ArrayList라는 대안이 필요했다.
ArrayList는 값을 추가하고 빼는 게 매우 편리하기에 변환하는 방법을 익힐 필요가 있었다!
int[] <-> ArrayList
1. for Loop
import java.util.*;
class Solution {
public static int[] solution(int[] arr) {
//1. int[] to ArrayList
List<Integer> arrayList = new ArrayList<>();
for(int num: arr){
arrayList.add(num);
}
//2. ArrayList to int[]
int[] answer = new int[arrayList.size()];
for(int i = 0; i < arrayList.size(); i++){
answer[i] = arrayList.get(i);
}
return answer;
}
}
반복문을 돌며 하나씩 값을 새로운 자료형에 넣는 방식이다.
단순하지만 효과적이다!
2. Stream 사용(자바 8 이상)
import java.util.*;
class Solution {
public static void solution(int[] arr){
//int[] to ArrayList
List<Integer> arrayList = Arrays.stream(arr)
.boxed() //int를 Integer로 박싱
.collect(Collectors.toList());
/ArrayList to int[]
int[] newArr = arrayList.stream()
.mapToInt(Integer::intValue)//Integer을 int로 언박싱
.toArray();
}
}
Stream을 사용할 때는
ArrayList는 Integer (Wrapper Class)를 쓰고,
int[]는 int (Primitive type)를 쓰므로
박싱 언박싱을 한다는 것만 기억하면 편하게 쓸 수 있을 것이다!
Stream을 사용하면 int[]를 ArrayList로 바꾸는 것 이외의 다른 것들도 가능하므로,
다른 기능도 잘 익혀서 사용하도록 하자.
3. 생성할 때 초기화
import java.util.*;
class Solution {
public static int[] solution(int[] arr) {
//1. int[] to ArrayList
List<Integer> arrayList = new ArrayList<>(Arrays.toList(arr));
return answer;
}
}
웹 서핑을 하다 우연히 발견한 방법인데,
Arrays.toList()를 할 경우 고정된 List가 나와 사용이 불편하지만
new ArrayList<>(Arrays.toList())를 하면 ArrayList를 그대로 사용이 가능하다고 한다.
이런 방법도 있구나 하고 알면 좋을거 같아서 넣었다!
'Language > Java' 카테고리의 다른 글
[Java][Collections Framework 완전 정복] Stack 클래스를 사용하지 않는 이유 및 대안 (0) | 2025.01.16 |
---|---|
[Java][Collections Framework 완전 정복] Map 인터페이스, Map.Entry 인터페이스 (0) | 2025.01.07 |
[Java][Collections Framework 완전 정복] Set 인터페이스(HashSet) (0) | 2025.01.07 |