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

ringa_lee

répondre à tous(3)
大家讲道理

    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.

洪涛

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.

大家讲道理

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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!