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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top