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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top