Usando API Collections para baralhar
-
05-07-2019 - |
Pergunta
Eu estou ficando muito frustrado porque eu não consigo descobrir por que coleções baralhar não está funcionando corretamente.
Vamos dizer que eu estou tentando embaralhar a matriz randomizer
.
int[] randomizer = new int[] {200,300,212,111,6,2332};
Collections.shuffle(Arrays.asList(randomizer));
Por alguma razão a estadia elementos ordenados exatamente o mesmo se ou não eu chamar o método shuffle. Alguma ideia?
Solução
Arrays.asList
não pode ser usado com matrizes de primitivos. Utilize este em vez disso:
Integer[] randomizer = new Integer[] {200,300,212,111,6,2332};
Collections.shuffle(Arrays.asList(randomizer));
A mesma regra se aplica para a maioria das classes no quadro coleções, em que você não pode usar tipos primitivos.
O código original (com int[]
) compilado bem, mas não funcionou como previsto, por causa do comportamento do asList
método variádica: ele só faz uma lista de um elemento, com a matriz int
como seu único membro
Outras dicas
resposta Chris' está correto.
Como eu disse em um comentário em resposta Chris', sua matriz subjacente vai mudar de forma adequada a menos que as necessidades ArrayList para crescer, ea lista cria um novo e copia itens para ele.
Você pode querer manter uma referência à lista e iterar que após a chamada Arrays.asList, e não iterate sobre a matriz, depois disso, iterar sobre a Lista de vez.