[Java]配列(Array)をランダムに並び替えてシャッフルするには?

Java

どうも、ちょげ(@chogetarou)です。

配列(Array)をランダムに並び替えてシャッフルする方法を紹介します。

スポンサーリンク

方法

インターフェース, インターネット, プログラム, ブラウザ, Www

配列(Array)をランダムに並び替えてシャッフルする方法は、2つあります。

Random

1つは、Randomを使う方法です。

まず、Randomのインスタンスを生成します。

そして、forループでフィッシャー–イェーツのシャッフルを実装します。

フィッシャー–イェーツのシャッフルに必要なランダムなインデックスは、RandomのnextInt()で生成します。

//array=シャッフルする配列
Random random = new Random();
int index, temp;
for (int i = array.length - 1; i > 0; i--)
{
    index = random.nextInt(i + 1);  
    temp = array[index];
    array[index] = array[i];
    array[i] = temp;
}

上記のforループは、対象の配列をランダムに並び替えてシャッフルします。

使用例

import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        int[] numbers = new int[]{ 1, 2, 3, 4, 5, 6 };
        
        shuffleArray(numbers);
        
        for (int i : numbers) {
            System.out.println(i);
        }
    }
    
    private static void shuffleArray(int[] array)
    {
        int index, temp;
        Random random = new Random();
        for (int i = array.length - 1; i > 0; i--)
        {
            index = random.nextInt(i + 1);
            temp = array[index];
            array[index] = array[i];
            array[i] = temp;
        }
    }
}
出力:
6
4
1
2
5
3

Collections.shuffle()

もう1つは、Collections.shuffle()を使う方法です。

まず、ArraysからasList()を呼び出し、asList()の結果を変数に格納します。

Arrays.asList()の引数に配列を指定します。

次に、Collectionsからshuffle()を呼び出します。

Collections.shuffle()の引数に、変数を指定します。

そして、変数からtoList()を呼び出し、変数に配列を指定します。

T[] array = new T[]{ ・・・ };

List<T> list = Arrays.asList(array);
        
Collections.shuffle(array);
        
list.toArray(array);

上記のtoArray()は、引数に指定した配列をランダムに並び替えてシャッフルします。

配列の型をリストの型に合わせる必要があります。

使用例

import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        Integer[] numbers = new Integer[]{ 1, 2, 3, 4, 5, 6 };
        
        List<Integer> list = Arrays.asList(numbers);
        
        Collections.shuffle(list);
        
        list.toArray(numbers);
        
        for (int i : numbers) {
            System.out.println(i);
        }
    }
}
出力:
3
2
4
5
6
1

まとめ

配列(Array)をランダムに並び替えてシャッフルする方法は、次の2つです。

  • Randomを使う方法
  • Collections.shuffle()を使う方法

コメント

タイトルとURLをコピーしました