Javaは、アメリカのファッション.シャッフルではどう?
-
20-09-2019 - |
質問
私は最近、自分自身のご要求くださいマイリストなかった。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です「>ランダムのオブジェクトは、デフォルトのシードで作成します。