java - Collections.shuffle
ringa_lee
ringa_lee 2017-04-18 10:07:02
0
3
604
ringa_lee
ringa_lee

ringa_lee

membalas semua(3)
大家讲道理

    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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!