Hay varias formas de generar valores aleatorios en Java.
Random
La clase java.util.Random proporciona varios métodos para generar valores seudoaleatorios.
Random random = new Random();
random.next(8); // Generates a random int with the given number of bits, in this case 8
random.nextInt(); // Generates a random int in the range Integer.MIN_VALUE through Integer.MAX_VALUE
random.nextInt(10); // Generates a random int in the range 0 to 10
random.nextFloat(); // Generates a random float in the range 0.0 to 1.0
random.nextDouble(); // Generates a random double in the range 0.0 to 1.0
random.nextBoolean(); // Generates a random boolean value
random.nextLong(); // Generates a random long value
Además de su constructor por defecto, la clase Random también tiene otro constructor en el que se puede proporcionar una semilla personalizada.
Si se crean dos instancias de Random con la misma semilla y se realiza la misma secuencia de llamadas a métodos para cada una, generarán y devolverán secuencias de números idénticas.
Math.random()
El método Math.random() es un método utilitario para generar un Double aleatorio en el rango de 0.0 a 1.0.
ThreadLocalRandom
La clase java.util.concurrent.ThreadLocalRandom es una alternativa a java.util.Random y está diseñada para ser segura para hilos.
Esta clase tiene algunos métodos utilitarios adicionales para generar valores que aceptan tanto un límite inferior como uno superior, lo que la hace un poco más fácil de usar.
ThreadLocalRandom random = ThreadLocalRandom.current();
random.nextInt(10, 20); // Generates a random int in the range 10 to 20
random.nextLong(10, 20); // Generates a random long in the range 10 to 20
random.nextFloat(10.0, 20.0); // Generates a random float in the range 10 to 20
random.nextDouble(10.0, 20.0); // Generates a random double in the range 10 to 20
Los valores aleatorios se usan a menudo para generar valores sensibles, como las contraseñas. Sin embargo, ninguno de los métodos para generar valores aleatorios descritos anteriormente se considera criptográficamente seguro.
Para generar números aleatorios criptográficamente fuertes, usa la clase java.security.SecureRandom.