Cómo barajar realmente un mazo de cartas

Cuando necesito barajar una baraja de cartas de póker en Java / Android, usoCollections.shuffle(List<?> list), por supuesto. Alguna vez he estado haciendo esto y los resultados parecían aceptables. Pero no lo son.

Como se indica eneste papel, hay 52! posibles barajas únicas de un mazo de póquer de 52 cartas. Eso equivale a unos 2 ^ 226.

PeroCollections.shuffle(List<?> list) usosnew Random() por defecto que utiliza unaSemilla de 48 bits y, por lo tanto, solo puede crear 2 ^ 48 shuffles únicos, que es solo3.49*10^(-52) ¡Porcentaje de todas las barajas posibles!

Entonces, ¿cómo barajar las cartas de la manera correcta?

He empezado a usarSecureRandom, pero es suficiente, finalmente?

List<Card> cards = new ArrayList<Card>();
...
SecureRandom secureRandom;
try {
    secureRandom = SecureRandom.getInstance("SHA1PRNG");
}
catch (NoSuchAlgorithmException e) {
    secureRandom = new SecureRandom();
}
secureRandom.nextBytes(new byte[20]); // force SecureRandom to seed itself
Collections.shuffle(cards, secureRandom);

Respuestas a la pregunta(5)

Su respuesta a la pregunta