Recuerdo que, cuando estaba iniciando en esto de programar con Java, me pidieron crear un programa para sortear premios y yo solo pensé: “¿Cómo lo hago? Suena muy difícil”. Hablando con un amigo que tenía más experiencia, me explicó que Collections.shuffle() en Java me permitiría mezclar los elementos de una lista, que era justo lo que yo necesitaba. Para mi sorpresa, el programa fue todo un éxito. Así que, sin más preámbulos, aquí te explico cómo usarlo.
¿Qué es Collections.shuffle() en Java?
Collections.shuffle() en Java hace parte de la clase Collections y te brinda diversas herramientas diseñadas para manipular colecciones como listas y conjuntos. Entonces, lo que hace Collections.shuffle() es mezclar aleatoriamente los elementos de una lista. Para hacerlo usa una fuente predeterminada de aleatoriedad, que es la clase Random.
Es como cuando tienes un mazo de cartas y quieres mezclarlo para que queden con un orden aleatorio. Collections.shuffle(), en este caso, serían tus manos, que estarían mezclando bien ese mazo de cartas, para que estén en un orden diferente cada vez.
Entonces, cuando usas shuffle() en una colección como un ArrayList, estás diciendo que quieres que los elementos se reorganicen de manera aleatoria, así que el orden de los elementos cambiará cada vez que se llama a shuffle().
Sintaxis
Collections.shuffle(List<?> list)
Como te decía, opcionalmente, puedes usar una fuente personalizada de aleatoriedad:
Collections.shuffle(List<?> list, Random rnd)
Parámetros
- list: Es la lista que vas a mezclar.
- rnd (opcional): Es una instancia de la clase Random para personalizar la aleatoriedad.
¿Cómo usar Collections.shuffle() en Java? Ejemplos sencillos
Mezclando una lista de cadenas
He decidido que es mejor empezar con un ejemplo básico, para que aprendas primero a mezclar elementos de una lista de cadenas, que es como lo más común en Java:
import java.util.ArrayList;
import java.util.Collections;
public class Main {
public static void main(String[] args) {
ArrayList<String> colores = new ArrayList<>();
colores.add("Rojo");
colores.add("Azul");
colores.add("Verde");
colores.add("Amarillo");
System.out.println("Lista original: " + colores);
Collections.shuffle(colores);
System.out.println("Lista mezclada: " + colores);
}
}
Esta es la salida:
Lista original: [Rojo, Azul, Verde, Amarillo]
Lista mezclada: [Verde, Rojo, Amarillo, Azul]
Mezclando números enteros
En este ejemplo quiero mostrarte cómo usar Collections.shuffle() en Java en una lista de números enteros. Te servirá para tareas como generar combinaciones aleatorias o barajar datos numéricos.
import java.util.ArrayList;
import java.util.Collections;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> numeros = new ArrayList<>();
numeros.add(10);
numeros.add(20);
numeros.add(30);
numeros.add(40);
System.out.println("Lista original: " + numeros);
Collections.shuffle(numeros);
System.out.println("Lista mezclada: " + numeros);
}
}
Mira la salida:
Lista original: [10, 20, 30, 40]
Lista mezclada: [30, 40, 10, 20]
Mezclando un conjunto (Set)
Ahora bien, si quieres mezclar un conjunto, primero debes convertirlo a una lista, ya que Collections.shuffle()en Java no funciona directamente con conjuntos. Te lo muestro en este ejemplo:
import java.util.*;
public class Main {
public static void main(String[] args) {
Set<Integer> conjunto = new LinkedHashSet<>();
conjunto.add(5);
conjunto.add(10);
conjunto.add(15);
conjunto.add(20);
System.out.println("Conjunto original: " + conjunto);
List<Integer> lista = new ArrayList<>(conjunto);
Collections.shuffle(lista);
Set<Integer> conjuntoMezclado = new LinkedHashSet<>(lista);
System.out.println("Conjunto mezclado: " + conjuntoMezclado);
}
}
Observa la salida:
Conjunto original: [5, 10, 15, 20]
Conjunto mezclado: [15, 20, 5, 10]
Consejos para usar correctamente Collections.shuffle() en Java
- Evita usar en estructuras inmutables: Ten en cuenta que, si tu lista es inmutable, debes mezclar una copia en lugar de la lista original.
- Usa una fuente personalizada si necesitas control: Para esas aplicaciones que requieren una aleatoriedad reproducible (como pruebas), yo te aconsejo usar una instancia de Random personalizada.
- Ten cuidado con las listas grandes: Sí, el método Collections.shuffle() es bastante bueno, pero con listas extremadamente grandes, me he dado cuenta de que su rendimiento se ve afectado. Así que ten cuidado en estos casos.
Espero que, gracias a este artículo, hayas entendido por completo cómo usar el método Collections.shuffle() en Java para mezclar elementos en listas y conjuntos. Considero que, con estos ejemplos prácticos, ya estás más que listo para implementarlo fácilmente en tareas como juegos, sorteos o cualquier aplicación que requiera aleatoriedad.
¿No te bastó solo con la teoría? No te preocupes, nosotros te enseñamos con la práctica también. Estamos más que listos con nuestro Bootcamp de Java Full Stack de KeepCoding. Aquí aprenderás todo sobre estructuras de datos, programación avanzada y desarrollo web. Lo mejor de todo, de la mano de profesionales expertos y ansiosos por compartir su sabiduría. Así que, ¡Transforma tu futuro y comienza tu carrera en el sector IT ahora mismo!