Utilizzo dell'API delle raccolte per la riproduzione casuale
-
05-07-2019 - |
Domanda
Mi sento molto frustrato perché non riesco a capire perché il mescolamento delle raccolte non funzioni correttamente.
Diciamo che sto cercando di mescolare l'array randomizer
.
int[] randomizer = new int[] {200,300,212,111,6,2332};
Collections.shuffle(Arrays.asList(randomizer));
Per qualche motivo gli elementi rimangono ordinati allo stesso modo indipendentemente dal fatto che io chiami o meno il metodo shuffle. Qualche idea?
Soluzione
Arrays.asList
non può essere utilizzato con matrici di primitive. Usa questo invece:
Integer[] randomizer = new Integer[] {200,300,212,111,6,2332};
Collections.shuffle(Arrays.asList(randomizer));
La stessa regola si applica alla maggior parte delle classi nel framework delle raccolte, in quanto non è possibile utilizzare tipi primitivi.
Il codice originale (con int []
) compilato bene, ma non ha funzionato come previsto, a causa del comportamento del metodo variadico asList
: crea semplicemente un elenco di un elemento, con l'array int
come unico membro.
Altri suggerimenti
La risposta di Chris è corretta.
Come ho detto in un commento sulla risposta di Chris, l'array sottostante cambierà in modo appropriato a meno che l'arraylist non abbia bisogno di crescere e l'elenco ne crei uno nuovo e vi copi gli elementi.
Potresti voler mantenere un riferimento all'elenco e iterare su quello dopo la chiamata Arrays.asList, e non iterare sull'array successivamente, iterare invece sull'Elenco.