for (int i=size; i>1; i--)
swap(list, i-1, rnd.nextInt(i));
shuffle mengacak susunan senarai, menggunakan Random untuk menjana indeks (nombor rawak) dan menukar elemen i-1 dengan indeks rawak. Gelung collection.size() kali.
Untuk masalah seperti ini, lihat sahaja kod sumber.
@SuppressWarnings({"rawtypes", "unchecked"})
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));
ListIterator it = list.listIterator();
for (int i=0; i<arr.length; i++) {
it.next();
it.set(arr[i]);
}
}
}
Di atas ialah kod sumber JDK Kaedah terasnya ialah shuffle, dengan beberapa ulasan dialih keluar.
Pertama-tama dapatkan bilangan elemen dalam set Jika kurang daripada 5 atau melaksanakan antara muka RandomAccess, ia akan menggelung semula dan secara rawak menukar kedudukan dua elemen bersebelahan dalam set antara muka Jika ia dilaksanakan Mempunyai antara muka ini bermakna menyokong operasi capaian rawak pantas, sama seperti tatasusunan. RandomAccess
Jika terdapat lebih daripada atau sama dengan 5 elemen dan antara muka
tidak dilaksanakan, maka ia akan ditukar kepada tatasusunan, dan kemudian ia juga akan gelung, menukar kedudukan dua elemen bersebelahan secara rawak dalam set , dan akhirnya meletakkan tatasusunan kembali kepada asal RandomAccessSederhana. list
Ia adalah "anggaran" shuffle koleksi secara rawak Prinsipnya sangat mudah ia berdasarkan penjana nombor rawak dan berinteraksi secara rawak dengan susunan unsur koleksi.
shuffle
mengacak susunan senarai, menggunakanRandom
untuk menjana indeks (nombor rawak) dan menukar elemeni-1
dengan indeks rawak. Gelungcollection.size()
kali.Untuk masalah seperti ini, lihat sahaja kod sumber.
Di atas ialah kod sumber JDK Kaedah terasnya ialah
shuffle
, dengan beberapa ulasan dialih keluar.Pertama-tama dapatkan bilangan elemen dalam set Jika kurang daripada 5 atau melaksanakan antara muka
Jika terdapat lebih daripada atau sama dengan 5 elemen dan antara mukaRandomAccess
, ia akan menggelung semula dan secara rawak menukar kedudukan dua elemen bersebelahan dalam set antara muka Jika ia dilaksanakan Mempunyai antara muka ini bermakna menyokong operasi capaian rawak pantas, sama seperti tatasusunan.RandomAccess
tidak dilaksanakan, maka ia akan ditukar kepada tatasusunan, dan kemudian ia juga akan gelung, menukar kedudukan dua elemen bersebelahan secara rawak dalam set , dan akhirnya meletakkan tatasusunan kembali kepada asal
RandomAccess
Sederhana.list
Ia adalah "anggaran" shuffle koleksi secara rawak Prinsipnya sangat mudah ia berdasarkan penjana nombor rawak dan berinteraksi secara rawak dengan susunan unsur koleksi.