Usando colecciones API para barajar
-
05-07-2019 - |
Pregunta
Me estoy frustrando mucho porque parece que no entiendo por qué no funciona correctamente la selección de colecciones.
Digamos que estoy tratando de barajar la matriz randomizer
.
int[] randomizer = new int[] {200,300,212,111,6,2332};
Collections.shuffle(Arrays.asList(randomizer));
Por alguna razón, los elementos permanecen ordenados exactamente igual, ya sea que yo llame al método aleatorio o no. ¿Algunas ideas?
Solución
Arrays.asList
no se puede utilizar con matrices de primitivas. Use esto en su lugar:
Integer[] randomizer = new Integer[] {200,300,212,111,6,2332};
Collections.shuffle(Arrays.asList(randomizer));
La misma regla se aplica a la mayoría de las clases en el marco de colecciones, ya que no puede usar tipos primitivos.
El código original (con int []
) se compiló bien, pero no funcionó según lo previsto, debido al comportamiento del método variadic asList
: solo hace un lista de un elemento, con la matriz int
como su único miembro.
Otros consejos
La respuesta de Chris es correcta.
Como dije en un comentario sobre la respuesta de Chris, su matriz subyacente cambiará adecuadamente a menos que el arraylist necesite crecer, y la lista cree una nueva y copie los elementos en ella.
Es posible que desee mantener una referencia a la lista e iterar sobre eso después de la llamada Arrays.asList, y no iterar sobre la matriz después de eso, iterar sobre la Lista en su lugar.