- 封装接口:
-
RandomGenerator
该接口旨在为生成伪随机值序列的对象提供一个通用协议,不仅可以轻松地跳跃,而且还可以向前“跃进”(例如2128)到状态周期中的一个非常遥远的点。通常,人们将通过从单个原始
RandomGenerator.LeapableGenerator
对象进行迭代跃迁来构造一系列RandomGenerator.LeapableGenerator
对象,然后对每个这样的对象生成一系列对象通过迭代跳跃。在跃迁和跳跃之间几乎没有概念上的区别,但通常跃迁将是状态周期中的一个非常长的跳跃(也许是2128的距离)。
理想情况下,通过从单个原始RandomGenerator.LeapableGenerator
对象进行迭代跃迁和跳跃生成的所有RandomGenerator.LeapableGenerator
对象彼此之间是统计独立的,并且各自是均匀的。实际上,人们必须接受对独立性和均匀性的某种近似。特别地,特定实现可以假定由leaps
方法生成的流中的每个生成器用于生成(通过跳跃)不超过264的对象。建议实现者使用周期至少为2191的算法。
提供了执行单个跃迁操作以及生成从原始生成器通过内部状态的迭代复制和跃迁产生的生成器流的方法。生成的生成器必须实现RandomGenerator.JumpableGenerator
接口,但不必实现RandomGenerator.LeapableGenerator
接口。多线程应用程序的典型策略是创建一个单一的RandomGenerator.LeapableGenerator
对象,仅调用其leaps
方法一次,然后从生成的流中分配生成器,每个线程一个。然后调用每个这样的生成器的jump
()方法以生成生成器对象的子流。
实现RandomGenerator.LeapableGenerator
的对象通常不是密码安全的。考虑使用SecureRandom
来获取密码安全的伪随机数生成器,用于安全敏感应用程序。
-
Nested Class Summary
Nested classes/interfaces declared in interface java.util.random.RandomGenerator
RandomGenerator.ArbitrarilyJumpableGenerator, RandomGenerator.JumpableGenerator, RandomGenerator.LeapableGenerator, RandomGenerator.SplittableGenerator, RandomGenerator.StreamableGenerator
-
Method Summary
Modifier and TypeMethodDescriptioncopy()
返回一个内部状态与此生成器完全相同的新生成器(因此,如果经历相同系列操作,它们的未来行为应该是相同的)。复制此生成器,将此生成器向前跃进,然后返回复制品。void
leap()
更改此伪随机数生成器的状态,使其在其状态周期内向前跃进一个大的固定距离(通常为296或更多)。double
返回leap
()方法将在此生成器对象的状态周期内向前跃进的距离。default Stream
<RandomGenerator.JumpableGenerator> leaps()
返回一个有效无限的新伪随机数生成器流,每个生成器实现RandomGenerator.JumpableGenerator
接口。default Stream
<RandomGenerator.JumpableGenerator> leaps
(long streamSize) 返回一个生成给定streamSize
数量的新伪随机数生成器的流,每个生成器实现RandomGenerator.JumpableGenerator
接口。Methods declared in interface java.util.random.RandomGenerator
doubles, doubles, doubles, doubles, ints, ints, ints, ints, isDeprecated, longs, longs, longs, longs, nextBoolean, nextBytes, nextDouble, nextDouble, nextDouble, nextExponential, nextFloat, nextFloat, nextFloat, nextGaussian, nextGaussian, nextInt, nextInt, nextInt, nextLong, nextLong, nextLong
Methods declared in interface java.util.random.RandomGenerator.JumpableGenerator
copyAndJump, jump, jumpDistance, jumps, jumps, rngs, rngs
-
Method Details
-
of
- 参数:
-
name
- 随机数生成器的名称算法 - 返回:
- RandomGenerator.LeapableGenerator的一个实例
- 抛出:
-
NullPointerException
- 如果名称为null -
IllegalArgumentException
- 如果找不到指定的算法
-
copy
返回一个内部状态与此生成器完全相同的新生成器(因此,如果经历相同系列操作,它们的未来行为应该是相同的)。- 指定者:
-
copy
在接口RandomGenerator.JumpableGenerator
- 返回:
- 一个是此生成器的副本的新对象
-
leap
void leap()更改此伪随机数生成器的状态,使其在其状态周期内向前跃进一个大的固定距离(通常为296或更多)。 -
leapDistance
double leapDistance()返回leap
()方法将在此生成器对象的状态周期内向前跃进的距离。- 返回:
-
默认跃进距离(作为
double
值)
-
leaps
返回一个有效无限的新伪随机数生成器流,每个生成器实现RandomGenerator.JumpableGenerator
接口。- 实现要求:
-
默认实现生成一个顺序流,重复调用此生成器上的
copy
()和leap
(),并且复制品成为流产生的生成器。 - 实现注意:
-
可以以等效于
leaps
(Long.MAX_VALUE
)的方式实现此方法。 - 返回:
-
一个实现
RandomGenerator.JumpableGenerator
接口的对象流
-
leaps
返回一个生成给定streamSize
数量的新伪随机数生成器的流,每个生成器实现RandomGenerator.JumpableGenerator
接口。- 实现要求:
-
默认实现生成一个顺序流,重复调用此生成器上的
copy
()和leap
(),并且复制品成为流产生的生成器。 - 参数:
-
streamSize
- 要生成的生成器数量 - 返回:
-
一个实现
RandomGenerator.JumpableGenerator
接口的对象流 - 抛出:
-
IllegalArgumentException
- 如果streamSize
小于零
-
copyAndLeap
复制此生成器,将此生成器向前跃进,然后返回复制品。- 实现要求:
- 默认实现复制此生成器,跃进然后返回复制品。
- 返回:
- 跃进发生之前此生成器对象的一个副本
-