Utilisation de l'API de collections pour la lecture aléatoire
-
05-07-2019 - |
Question
Je suis très frustré parce que je n'arrive pas à comprendre pourquoi le brassage des collections ne fonctionne pas correctement.
Disons que je tente de mélanger le tableau randomizer
.
int[] randomizer = new int[] {200,300,212,111,6,2332};
Collections.shuffle(Arrays.asList(randomizer));
Pour une raison quelconque, les éléments restent triés exactement de la même manière, que j'appelle ou non la méthode aléatoire. Des idées?
La solution
Arrays.asList
ne peut pas être utilisé avec des tableaux de primitives. Utilisez ceci à la place:
Integer[] randomizer = new Integer[] {200,300,212,111,6,2332};
Collections.shuffle(Arrays.asList(randomizer));
La même règle s'applique à la plupart des classes du framework de collections, en ce sens que vous ne pouvez pas utiliser de types primitifs.
Le code d'origine (avec int []
) a été bien compilé, mais n'a pas fonctionné comme prévu, à cause du comportement de la méthode variadique asList
: il crée simplement une liste à un élément, avec le tableau int
comme seul membre.
Autres conseils
La réponse de Chris est correcte.
Comme je l'ai dit dans un commentaire sur la réponse de Chris, votre tableau sous-jacent changera de manière appropriée, sauf si la liste doit être agrandie, et la liste en crée un nouveau et y copie des éléments.
Vous voudrez peut-être conserver une référence à la liste et l'itérer après l'appel de Arrays.asList, et non l'itération du tableau après cela, mais plutôt l'itération de la liste.