java 17 - 增强型伪随机数生成器
增强型伪随机数生成器为PRNG提供了新的接口类型和实现,包括可跳转的PRNG和一类额外的可拆分PRNG算法(LXM)。增强型伪随机数生成器由JEP 356并在JDK 17中作为正式功能提供。
要使用增强型伪随机数生成器,需要使用java.util.random包中的新的接口和类。例如,我们可以使用RandomGenerator接口来获取一个PRNG的实例,并且使用它来生成各种类型的随机数:
public static void generateRandomNumbers() {
RandomGenerator random = RandomGenerator.getDefault();
System.out.println("A random boolean: " + random.nextBoolean());
System.out.println("A random int: " + random.nextInt());
System.out.println("A random long: " + random.nextLong());
System.out.println("A random float: " + random.nextFloat());
System.out.println("A random double: " + random.nextDouble());
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
打印
A random boolean: false
A random int: -1385830796
A random long: 3352694514190603997
A random float: 0.35348153
A random double: 0.8737301953830204
1
2
3
4
5
2
3
4
5
注意,RandomGenerator接口提供了很多方便的方法来生成不同范围和分布的随机数,例如nextInt(int bound)、nextLong(long bound)、nextGaussian()等。我们也可以使用RandomGeneratorFactory类来获取不同的PRNG算法的实例,例如:
public static void useDifferentAlgorithms() {
RandomGenerator random1 = RandomGeneratorFactory.of("L32X64MixRandom").create();
RandomGenerator random2 = RandomGeneratorFactory.of("L64X128MixRandom").create();
RandomGenerator random3 = RandomGeneratorFactory.of("L128X256MixRandom").create();
System.out.println("Using L32X64MixRandom: " + random1.nextInt());
System.out.println("Using L64X128MixRandom: " + random2.nextInt());
System.out.println("Using L128X256MixRandom: " + random3.nextInt());
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
打印
Using L32X64MixRandom: 715378305
Using L64X128MixRandom: -407143825
Using L128X256MixRandom: 2063459856
1
2
3
2
3
上次更新: 2024/01/11 17:06:16