Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java에서 리스트 무작위로 섞기 – Collections.shuffle() 완벽 가이드


Java에서 리스트(List)의 요소 순서를 무작위로 바꾸고 싶다면 Collections.shuffle() 메서드를 사용하는 것이 가장 간단한 방법입니다. 카드 게임, 퀴즈 문항 순서 변경, 추첨 프로그램 등 다양한 상황에서 유용하게 활용할 수 있습니다.

예제 코드

import java.util.*;
public class Demo{
    public static void main(String[] args){
        ArrayList<String> my_list = new ArrayList<String>();
        my_list.add("Hello");
        my_list.add(",");
        my_list.add("this");
        my_list.add("is");
        my_list.add("a");
        my_list.add("sample");
        System.out.println("원본 리스트 : \n" + my_list);
        Collections.shuffle(my_list);
        System.out.println("\n섞인 후의 리스트 : \n" + my_list);
    }
}

실행 결과

원본 리스트 :
[Hello, ,, this, is, a, sample]

섞인 후의 리스트 :
[a, is, ,, Hello, this, sample]

코드 설명

Demo라는 이름의 클래스 안에 main 메서드가 정의되어 있습니다. 이 메서드에서는 먼저 문자열을 저장할 ArrayList를 생성한 뒤, add() 메서드를 호출하여 요소들을 하나씩 추가합니다.

그다음 원본 리스트를 출력하고, Collections.shuffle() 메서드에 해당 리스트를 인자로 전달합니다. 이렇게 하면 리스트 내부의 요소들이 무작위 순서로 재배열되며, 최종적으로 섞인 결과가 화면에 출력됩니다.

알아두면 좋은 점

  • shuffle()은 내부적으로 피셔–예이츠(Fisher–Yates) 알고리즘을 기반으로 동작하므로, 실행할 때마다 결과 순서가 달라질 수 있습니다.
  • 재현 가능한(reproducible) 결과가 필요하다면 시드(seed)를 지정한 Random 객체를 두 번째 인자로 전달하면 됩니다.
    예: Collections.shuffle(my_list, new Random(1234));
  • 이 메서드는 리스트 자체를 직접 수정(in-place)하기 때문에 별도의 반환 값을 받을 필요가 없으며, 원본 리스트의 순서가 그대로 변경된다는 점에 유의해야 합니다.