Maison  >  Questions et réponses  >  le corps du texte

java - Collections.shuffle

ringa_leeringa_lee2728 Il y a quelques jours614

répondre à tous(3)je répondrai

  • 大家讲道理

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

    
        for (int i=size; i>1; i--)
            swap(list, i-1, rnd.nextInt(i));
    

    shuffle brouille l'ordre de la liste, utilise Random pour générer un index (nombre aléatoire) et échange les éléments de i-1 avec l'index aléatoire. Boucle collection.size() fois.

    répondre
    0
  • PHP中文网

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

    Pour ce genre de problème, il suffit de regarder le code source.

    @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]);
                }
            }
        }

    Ce qui précède est le code source du JDK. La méthode principale est la suivante shuffle, avec quelques commentaires supprimés.

    Obtenez d'abord le nombre d'éléments dans l'ensemble. S'il est inférieur à 5 ou implémente l'interface RandomAccess, il bouclera à nouveau et échangera aléatoirement les positions de deux éléments adjacents dans l'ensemble RandomAccess est une marque. Si elle est implémentée, avoir cette interface signifie prendre en charge des opérations d'accès aléatoire rapides, similaires aux tableaux.

    S'il y a plus ou égal à 5 ​​éléments et que l'interface RandomAccess n'est pas implémentée, alors elle sera convertie en tableau, puis elle bouclera également, échangeant aléatoirement les positions de deux éléments adjacents dans l'ensemble , et enfin remettez le tableau au listMedium d'origine.

    répondre
    0
  • 大家讲道理

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

    Il s'agit d'un brassage aléatoire "approximatif" de la collection. Le principe est très simple. Il est basé sur un générateur de nombres aléatoires et interagit de manière aléatoire avec l'ordre des éléments de la collection.

    répondre
    0
  • Annulerrépondre