JavaのShuffle()

PHPz
リリース: 2024-08-30 15:36:36
オリジナル
942 人が閲覧しました

Java には、コレクションやその他のデータ型に対してさまざまな操作を実行するための組み込み関数が多数あり、その 1 つがシャッフルです。シャッフル関数は、Python など他の多くの言語でも利用できます。

無料ソフトウェア開発コースを始めましょう

Web 開発、プログラミング言語、ソフトウェア テスト、その他

  • シャッフル関数は、コレクション要素をシャッフルするために使用されます。
  • パラメータで渡されたリスト要素をランダムに並べ替えます。
  • Java でシャッフルするには 2 つの方法があり、1 つはコレクション シャッフル メソッドを使用する方法、もう 1 つはランダム クラスを使用する方法です。
  • コレクション シャッフル関数は 2 つの方法で呼び出すこともできます。1 つはランダム性を指定するランダム パラメーターを使用する方法、もう 1 つはパラメーターを使用しない方法です。
  • シャッフル()
  • シャッフル(, )
  • 配列をリストに変換するには、リストを渡す必要があります。それからそれを collection.shuffle に渡し、結果を再度配列に変換します。

Java の Shuffle() の構文

シャッフルメソッドの宣言:

public static void shuffle(List<?> list)
ログイン後にコピー
public static void shuffle(List<?> list, Random random)
ログイン後にコピー

パラメータ:

  • リスト: 渡すリストはシャッフルされます。
  • ランダム: ランダム性のソースとなるシード値とともに渡されるランダム関数です。

戻り値:

  • シャッフル関数は値を返しません。リストをシャッフルするだけです。

Java での Shuffle() の例

以下の例では、いくつかのアルファベットを含む配列からリストを作成し、shuffle メソッドを使用して配列をシャッフルします。実行するたびに、異なるシャッフルされたリストが得られます。

例 #1

コード:

import java.util.*;
public class CollectionsShuffleExampleWithoutRandom {
public static void main(String[] args) {
List<String> list = Arrays.asList("R", "A", "H", "U", "L");
System.out.println("Before Shuffle : "+list);
Collections.shuffle(list);
System.out.println("After shuffle : "+list);
}
}
ログイン後にコピー

出力:

JavaのShuffle()

例 #2

以下の例では、整数のリンクされたリストを作成し、それにいくつかの整数を追加します。ただし、ここでは、ランダム性のソースとなる Random 関数である別の引数を渡しました。次に、シード値 5 の Random 関数を渡します。これは別のフレーバーであり、ランダム性を備えたシャッフル関数を使用する方法とも言えます。

コード:

import java.util.*;
public class CollectionsShuffleWithRandom {
public static void main(String[] args) {
//Create linked list object
LinkedList<Integer> list = new LinkedList<Integer>();
//Add values
list.add(90);
list.add(100);
list.add(1);
list.add(10);
list.add(20);
System.out.println("Before Shuffle = "+list);
//Random() to shuffle the given list.
Collections.shuffle(list, new Random());
System.out.println("Shuffled with Random() = "+list);
//Random(5) to shuffle the given list.
Collections.shuffle(list, new Random(5));
System.out.println("Shuffled with Random(5) = "+list);
}
}
ログイン後にコピー

出力:

JavaのShuffle()

シャッフルメソッドを使用しないシャッフル

シャッフルをさらに制御したい場合は、ランダムな方法でリストをシャッフルする独自のメソッドと、リストをシャッフルする別のアプローチを作成できます。この方法はより柔軟で、あらゆるアプリケーションに簡単に適合できます。 Java の組み込みメソッド内でシャッフルがどのように動作するかを実際に理解できます。

入力: int 配列

出力: シャッフルされた配列(ランダムな順序)

例:

public static int[] ShuffleArray(int[] array){
Random rand = new Random();  // Random value generator
for (int i=0; i<array.length; i++) {
int randomIndex = rand.nextInt(array.length);
int temp = array[i];
array[i] = array[randomIndex];
array[randomIndex] = temp;
}
return array;
}
ログイン後にコピー

上記の関数では、配列整数を渡すだけで、シャッフルされた配列が返されます。関数内では、配列がその長さになるまで反復され、乱数が生成されていることがわかります。この乱数は配列インデックスとして扱われ、別の配列と交換されます。これは、配列内で要素が交換される方法です。結果の配列はスワップされた配列になります。

上記の関数から、値のリストが送信され、配列内の要素を反復するたびに乱数が生成されるシャッフル関数の基本概念を得ることができます。この要素は、ランダム関数からランダムに生成されたインデックスを使用して、同じリスト内の別の要素と交換されます。

シャッフル機能の注意点

  • このメソッドは、リスト要素をランダムに並べ替えてシャッフルします。
  • 実行するたびに結果が異なる場合があります。
  • この関数はそれほど時間はかからず、直線的な時間で実行されます。
  • RandomAccess インターフェイスを実装していないリストを指定した場合、shuffle はまずリストを配列にコピーし、配列のコピーをシャッフルして、それを結果のリストにコピーして返します。
  • シャッフルは、リストを逆方向にスキャンします (最後の要素から 2 番目の要素までを繰り返し実行します)。
  • トラバース中に要素をランダムに選択し、それらを現在の位置と交換します。
  • ランダムに選択される要素は、リストの最初の要素から現在の要素までの部分です。

例外:

  • UnsupportedOperationException: 渡されたリストまたはリスト反復子が集合演算をサポートしていない場合。

シャッフルのアプリケーション

以下のシャッフル機能が一部のアプリケーションで使用される状況は数多くあります:

  • QA アプリケーションで質問のリストをシャッフルします。
  • アプリ ユーザーに毎日表示したい名言のシャッフル リスト。
  • ユーザーにチケット番号を割り当てたい宝くじアプリケーション。
  • 支払いフィールドの一意のトランザクション番号を生成します。
  • さまざまなユーザーの世代固有のユーザー ID をユーザー ID の前に付けることができます。
  • 暗号アプリケーションでも使用できます。

結論

上記の記事では、シャッフルの仕組みと使い方を理解しました。ランダム パラメーターを使用してシャッフル関数を使用する場合と、ランダム パラメーターを使用しない場合の複数の使用例が考えられます。また、一部のアプリケーションでは、Java の Random 関数を使用して独自のシャッフル関数を作成できる、別の柔軟な実装が必要になる場合があります。

以上がJavaのShuffle()の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!