Necesito mezclar los valores de un arreglo o de un ArrayList(con cualquiera me va).
Por ejemplo:
Tengo una arrayList, con 3 elementos
ArrayList array = new ArrayList();
array.add("Elemento 1");
array.add("Elemento 2");
array.add("Elemento 3");
//Algun metodo para mezclar el arrayList??
array.mezclarElementos();
Y lo que necesito, es que el arraList se vuelva a ordenar de manera aleatoria, es una de las pocas cosas que me faltan para terminar un juego que estoy haciendo ;D.
Solo crea dos listas y luegos usas el método addAll para agregarlas a una tercera.
List<String> listOne = Arrays.asList("One", "Two", "Three");
List<String> listTwo = Arrrays.asList("Four", "Five", "Six");
List<String> fullList = new ArrayList<>();
fullList.addAll(listOne);
fullList.addAll(listTwo);
Hazlo en un método para que las listas temporales se eliminen al terminar la ejecución del método.
Te lo explico , porque lo que pides es lógica. El código hazlo tú :P
1. Creas otro arraylist.
2. Haces un bucle que se ejecute mientras en el arraylist que tienes (el original) haya contenido (hay métodos que te dicen si una arraylist está vacía)
3. Si no está vacía haces un random entre 0 y el tamaño del arraylist original.
4. Coges el contenido de index el número que te salió en el random.
5. Le haces .add a la arraylist que creamos en el punto 1 de contenido que sacamos en el punto 4.
6. Borramos del array original el contenido de dicho index.
Ya está
Un saludo!
Hmm leí mal el enunciado. Al parecer lo que deseas es mover aleatoriamente el contenido de la lista. Para mezclar puedes hacer uso del método shuffle() de la clase Collections. Para ordenar, puedes evitar trabajo solo creando una lista temporal.
Ejemplo:
/* semilla que tomara el constructor de Random para generar un numero
* aleatorio siempre diferente. Si le pasamos la misma semilla, siempre
* generara el mismo numero, ya que Random genera numeros pseudo aleatorios.
* la semilla siempre sera diferente al usar System.nanoTime()
*/
public void process() {
List<String> list = Arrays.asList("A", "B", "C", "D", "E"); // lista original
List<String> tempList = new ArrayList<>(list); // lista temporal
suffleList(tempList); // mezclar
}
private void suffleList(List<String> list) {
final long seed = System.nanoTime();
Collections.shuffle(list, new Random(seed));
}
El método shufle era lo que buscaba muchas gracias a todos igual. ;D