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?

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top