자바 list의 sublist 사용해서 배열을 거꾸로 배치하는 코딩
조회수 366회
리스트를 거꾸로 배치하는 함수를 두 개를 작성해서 메인 함수에서 테스트해보려고 돌려봤는데요. sublist를 사용하여 작성한 함수에서 자꾸 arr 리스트에 특정 수들이 추가 되는 것 같습니다. 그래서 두번 째 함수를 똑같은 입력으로 테스트를 하면 다르게 출력이 되는 것 같아요. 리스트 슬라이싱 하는 방법이 sublist 말고 다른 방법이 있는지 궁금하고, 왜 추가가 되는건지 모르겠어서....도와주세요!!
public static List<Integer> reverse(List<Integer> arr) {
if (arr.size() == 1) {
return arr;
}
int base = arr.get(0);
arr = arr.subList(1, arr.size());
arr = reverse(arr); // arr에 reverse(arr)을 대입하지 않았을 때 왜 base 값이 붙어서 나오는지 궁금
arr.add(base);
return arr;
}
public static List<Integer> reverse(List<Integer> arr, int start, int end) {
if (start < end - 1) {
int base = arr.get(start);
arr.set(start, arr.get(end - 1));
arr.set(end - 1, base);
return reverse(arr, start + 1, end - 1);
} else {
return arr;
}
}
public static void main(String[] args) {
List<Integer> arr = new ArrayList<>(Arrays.asList(1,2,3,4,5,6));
List<Integer> arr2 = new ArrayList<>();
List<Integer> arr3 = new ArrayList<>();
arr2 = reverse(arr);
for (int a : arr2) {
System.out.print(a + " ");
}
System.out.println();
arr3 = reverse(arr, 0, 6);
for (int a : arr3) {
System.out.print(a + " ");
}
}
}
1 답변
-
#1
출력값이 이상한 것은 원본 리스트인
arr
가 변형됐기 때문이에요. 변형된 객체를 재사용하니 뭔가 붙어있는 것처럼 보이는 거죠.arr
는 원본 그대로 유지하고 복제를 만들어 다루는 방식으로 고쳐보세요.#2
공부하는 입장에선 치트에 가깝지만
java.util.Collections.reverse()
메서드가 있습니다.List<Integer> arr = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6)); Collections.reverse(arr); // 전달인자가 변형(mutation)되는 메서드 System.out.println(arr); // [6, 5, 4, 3, 2, 1]
댓글 입력