어제 오늘 내일

[Java 기초] Collections.swap()으로 리스트 요소 교환하기 본문

IT/Java

[Java 기초] Collections.swap()으로 리스트 요소 교환하기

hi.anna 2025. 9. 4. 01:42

리스트의 특정 위치에 있는 두 값을 서로 바꾸고 싶을 때, 보통 임시 변수를 두고 교환합니다.
하지만 자바의 Collections.swap() 메서드를 사용하면 한 줄로 간단히 처리할 수 있습니다.
이 메서드는 리스트의 두 요소를 서로 교환(swap)할 때 사용합니다.

 

1. 기본 사용법

import java.util.*;

public class SwapExample1 {
    public static void main(String[] args) {
        List<String> colors = new ArrayList<>(Arrays.asList("red", "blue", "green", "yellow"));

        Collections.swap(colors, 0, 2); // 0번째와 2번째 요소 교환

        System.out.println(colors);
    }
}

실행 결과

[green, blue, red, yellow]

👉 "red""green"의 위치가 바뀌었습니다.

 

2. 숫자 리스트에서 사용하기

import java.util.*;

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

        Collections.swap(numbers, 1, 3); // 1번 인덱스와 3번 인덱스 교환

        System.out.println(numbers);
    }
}

실행 결과

[1, 4, 3, 2, 5]

👉 인덱스 1(값: 2)와 인덱스 3(값: 4)이 교환되었습니다.

 

3. 잘못된 인덱스를 지정한 경우

만약 리스트의 범위를 벗어난 인덱스를 지정하면 IndexOutOfBoundsException이 발생합니다.

import java.util.*;

public class SwapExample3 {
    public static void main(String[] args) {
        List<String> fruits = Arrays.asList("apple", "banana", "cherry");

        // 존재하지 않는 인덱스 5를 지정
        Collections.swap(fruits, 0, 5);
    }
}

실행 결과 (예외 발생)

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 5, Size: 3

👉 따라서 항상 리스트의 크기 안에서만 사용해야 합니다.

 

4. 활용 예시

  • 리스트의 순서를 바꾸는 간단한 로직 구현
  • 버블 정렬 같은 교환 정렬 알고리즘 구현할 때
  • 카드 게임에서 특정 두 장의 카드를 바꿀 때

5. 정리

  • Collections.swap(List<?> list, int i, int j)
    👉 리스트 listi번째 요소와 j번째 요소를 교환
  • 인덱스 범위를 벗어나면 IndexOutOfBoundsException 발생
  • 정렬 알고리즘이나 게임 로직에서 유용

👉 두 요소의 위치를 바꿀 때는 Collections.swap()을 쓰면 깔끔하다!

 

 

반응형
Comments