Rumah  >  Soal Jawab  >  teks badan

java - Collections.shuffle

ringa_leeringa_lee2728 hari yang lalu609

membalas semua(3)saya akan balas

  • 大家讲道理

    大家讲道理2017-04-18 10:09:02

    
        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.

    balas
    0
  • PHP中文网

    PHP中文网2017-04-18 10:09:02

    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

    balas
    0
  • 大家讲道理

    大家讲道理2017-04-18 10:09:02

    Ia adalah "anggaran" shuffle koleksi secara rawak Prinsipnya sangat mudah ia berdasarkan penjana nombor rawak dan berinteraksi secara rawak dengan susunan unsur koleksi.

    balas
    0
  • Batalbalas