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.
shuffle
brouille l'ordre de la liste, utiliseRandom
pour générer un index (nombre aléatoire) et échange les éléments dei-1
avec l'index aléatoire. Bouclecollection.size()
fois.Pour ce genre de problème, il suffit de regarder le code source.
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'ensembleRandomAccess
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 aulist
Medium 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.