Java
 Computer >> コンピューター >  >> プログラミング >> Java

【Java入門】Collections.shuffle()でコレクションの要素をシャッフルする方法

この記事では、Javaでコレクション(List)の要素をシャッフル(ランダムに並び替え)する方法について詳しく解説します。

Collectionフレームワークは、複数のオブジェクトを格納・操作するための統一的なアーキテクチャを提供する仕組みです。Java Collections Frameworkを利用すれば、検索、ソート、挿入、操作、削除といった、データに対するほぼすべての操作を実現できます。

要素のシャッフルには、java.util.Collectionsクラスが提供するshuffle()メソッドを使用します。第2引数にRandomインスタンスを渡すことで、乱数生成の挙動を制御することも可能です。

実行結果のイメージ

例えば、次のような文字列のリストがあるとします。

入力リスト: [Java, program, is, fun, and, easy]

shuffle()メソッドを実行すると、実行するたびに異なる順序で要素が出力されます。

シャッフル後のリスト:
[is, easy, program, and, fun, Java]

アルゴリズム

ステップ1 - 処理を開始する
ステップ2 - ArrayList(input_list)を宣言する
ステップ3 - リストに値を追加する
ステップ4 - shuffle()メソッドを使ってリストの要素をシャッフルする
ステップ5 - 結果を表示する
ステップ6 - 処理を終了する

サンプルコード1:mainメソッド内にまとめて記述する場合

以下の例では、リストの作成からシャッフルまでのすべての処理をmainメソッド内に直接記述しています。

import java.util.*;
public class Demo {
   public static void main(String[] args){
      ArrayList<String> input_list = new ArrayList<String>();
      input_list.add("Java");
      input_list.add("program");
      input_list.add("is");
      input_list.add("fun");
      input_list.add("and");
      input_list.add("easy");
      System.out.println("定義されたリスト:" + input_list);
      Collections.shuffle(input_list, new Random());
      System.out.println("シャッフル後のリスト: \n" + input_list);
   }
}

出力結果

定義されたリスト:[Java, program, is, fun, and, easy]
シャッフル後のリスト:
[is, Java, fun, program, easy, and]

サンプルコード2:メソッドとしてカプセル化する場合

次の例では、シャッフル処理を独立したstaticメソッドとして切り出し、オブジェクト指向プログラミングの考え方に沿った構造で実装しています。

import java.util.*;
public class Demo {
   static void shuffle(ArrayList<String> input_list){
      Collections.shuffle(input_list, new Random());
      System.out.println("シャッフル後のリスト: \n" + input_list);
   }
   public static void main(String[] args){
      ArrayList<String> input_list = new ArrayList<String>();
      input_list.add("Java");
      input_list.add("program");
      input_list.add("is");
      input_list.add("fun");
      input_list.add("and");
      input_list.add("easy");
      System.out.println("定義されたリスト:" + input_list);
      shuffle(input_list);
   }
}

出力結果

定義されたリスト:[Java, program, is, fun, and, easy]
シャッフル後のリスト:
[fun, and, Java, easy, is, program]

まとめ

コレクションの要素をシャッフルしたい場合は、Collections.shuffle()メソッドを使うのが最も簡単です。第2引数にシード値を指定したRandomオブジェクトを渡せば、再現性のあるシャッフルも可能になります。なお、シャッフル結果は乱数に依存するため、実行するたびに出力順序が変わる点に注意してください。

  1. JavaのHashSetクラスとは?使い方とサンプルコードを解説

    HashSetとはHashSetは、AbstractSetクラスを継承し、Setインターフェースを実装したコレクションクラスです。内部的にはハッシュテーブルを使用して要素を格納します。ハッシュテーブルは「ハッシュ化(hashing)」と呼ばれる仕組みによって情報を管理します。ハッシュ化では、キーの内容をもとに「ハッシュコード」と呼ばれる一意の値が算出されます。このハッシュコードがインデックスとして利用され、キーに関連付けられたデータがその位置に格納されます。キーからハッシュコードへの変換は自動的に行われるため、開発者が意識する必要はありません。HashSetの主な特徴重複した要素は格納できない

  2. Javaでカウンタープログラムを実装する方法をわかりやすく解説

    この記事では、JavaのSwingを使ってシンプルなカウンター(数を数える)アプリケーションを実装する方法を解説します。このプログラムでは、JLabelでカウント用のラベルを表示し、JTextFieldで現在のカウント値を保持し、JButtonで「追加(Add)」「削除(Remove)」「リセット(Reset)」の3つのボタンを作成します。 「Add」ボタンをクリックするとJTextField内のカウントが1ずつ増加し、「Remove」ボタンをクリックすると1ずつ減少します。さらに「Reset」ボタンをクリックすると、カウントは0にリセットされます。 実装例 import java.awt.*