어제 오늘 내일

[Java] Collections.rotate() – 리스트를 간단히 회전시키는 방법 본문

IT/Java

[Java] Collections.rotate() – 리스트를 간단히 회전시키는 방법

hi.anna 2025. 9. 11. 02:07

리스트를 다루다 보면 특정한 규칙에 따라 요소들을 한 칸씩 밀거나 회전시켜야 할 때가 있습니다.
예를 들어, 슬라이드 쇼, 라운드 로빈 방식의 게임 순번 관리, 원형 큐 등을 구현할 때 유용하지요.
이때 Collections.rotate() 메서드를 사용하면 간단히 해결할 수 있습니다.
이 메서드는 리스트 안의 요소들을 원형으로 회전시키는 기능을 제공합니다. 큐, 캐러셀, 라운드 로빈 같은 구조를 구현할 때 유용합니다.

 

1. 기본 사용법

import java.util.*;

public class RotateExample1 {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5));

        Collections.rotate(list, 2);

        System.out.println(list); // [4, 5, 1, 2, 3]
    }
}

👉 distance 값을 2로 주었기 때문에 리스트가 오른쪽으로 2칸 이동했습니다.
즉, 맨 끝에 있던 4, 5가 앞으로 돌아옵니다.

 

2. 음수 distance 값

음수를 주면 왼쪽으로 회전합니다.

import java.util.*;

public class RotateExample2 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C", "D"));

        Collections.rotate(list, -1);

        System.out.println(list); // [B, C, D, A]
    }
}

👉 -1은 왼쪽으로 한 칸 이동, 맨 앞에 있던 "A"가 맨 뒤로 이동했습니다.

 

3. distance가 리스트 크기보다 큰 경우

distance는 리스트 크기로 나머지 연산이 적용됩니다.

List<Integer> nums = new ArrayList<>(Arrays.asList(10, 20, 30, 40));
Collections.rotate(nums, 6); 
System.out.println(nums); // [30, 40, 10, 20]

👉 리스트 크기(4)보다 큰 6을 넣어도, 실제로는 6 % 4 = 2만큼 이동한 효과가 납니다.

 

4. 활용 예시

  • 라운드 로빈 방식: 사용자나 플레이어의 순서를 돌아가며 관리
  • 슬라이드 쇼/배너 광고: 리스트에서 현재 위치를 기준으로 화면에 표시할 때
  • 원형 큐 구현: rotate()로 큐처럼 동작하게 만들 수 있음
public class RoundRobinExample {
    public static void main(String[] args) {
        List<String> players = new ArrayList<>(Arrays.asList("Alice", "Bob", "Charlie"));

        for (int i = 0; i < 6; i++) {
            System.out.println("현재 차례: " + players.get(0));
            Collections.rotate(players, -1); // 한 칸씩 왼쪽 이동
        }
    }
}

출력 결과:

현재 차례: Alice
현재 차례: Bob
현재 차례: Charlie
현재 차례: Alice
현재 차례: Bob
현재 차례: Charlie

 

5. 정리

  • Collections.rotate(List<?> list, int distance)
    → 리스트의 요소를 distance만큼 원형 회전
  • 양수 → 오른쪽, 음수 → 왼쪽
  • distance가 리스트 크기보다 커도 자동으로 나머지만큼 이동

👉 리스트를 손쉽게 회전시키고 싶다면 Collections.rotate()를 활용하자!

 

 

반응형
Comments