質問

私は最近、自分自身のご要求くださいマイリストなかった。Hibernateただき戻すための完全なる。馬鹿げhibernateは読書に興味を持っていました。

私は私のJava APIですから、そのシャッフルのメソッドはこの:

ランダムにpermutes指定されたリストのデフォルトで乱数の発生源.

の奇妙なジョージ-と思ったかです。ある数学コースで学ぶ。こちらをご確認ください。をコードについて教えてください。Java、答えてくれた方ありがとうございっArrayList?!?!?

具体的には、数学の概念を使っている。

役に立ちましたか?

解決

はい、あなたはコードを見ることができます。それは基本的にフィッシャー-Yates氏はのシャッフルありません。ここでは、(感謝OpenJDKの、そしてオープンソース:-Pためイェーイ)です。

public static void shuffle(List<?> list, Random rnd) {
    int size = list.size();
    if (size < SHUFFLE_THRESHOLD || list instanceof RandomAccess) {
        for (int i=size; i>1; i--)
            swap(list, i-1, rnd.nextInt(i));
    } else {
        Object arr[] = list.toArray();

        // Shuffle array
        for (int i=size; i>1; i--)
            swap(arr, i-1, rnd.nextInt(i));

        // Dump array back into list
        ListIterator it = list.listIterator();
        for (int i=0; i<arr.length; i++) {
            it.next();
            it.set(arr[i]);
        }
    }
}

スワップ法

 private static void swap(Object[] x, int a, int b) {
    Object t = x[a];
    x[a] = x[b];
    x[b] = t;
}

他のヒント

<のhref = "http://java.sun.com/j2se/1.5.0/docs/api/java/util/Collections.html#shuffle%28java.util.List%29" のrel =」 noreferrerは ">コレクションのJavadocが使わシャッフル方法についていくつかの情報を提供します。

  

この実装は、繰り返し「現在位置」にランダムに選択された要素を交換する、最後の要素から第まで、後方リストを横断します。要素がランダムに含め、現在の位置に最初の要素から実行リストの部分から選択される。

だから、最後に始まり、後方リストを歩きます。各要素にそれが停止し、リストから前の要素との現在の要素を入れ替え。この場合の「乱数のデフォルトのソースは、」おそらく<のhref =「http://java.sun.com/j2se/1.5.0/docs/api/java/util/Random.html」のrel = "noreferrerです「>ランダムのオブジェクトは、デフォルトのシードで作成します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top