- 所有超级接口:
-
RandomGenerator
,RandomGenerator.JumpableGenerator
,RandomGenerator.LeapableGenerator
,RandomGenerator.StreamableGenerator
- 封闭接口:
-
RandomGenerator
public static interface RandomGenerator.ArbitrarilyJumpableGenerator extends RandomGenerator.LeapableGenerator
该接口旨在为生成伪随机值序列的对象提供一个通用协议,并可以轻松地向前“跳跃”到状态周期中的远处点。
理想情况下,通过从单个原始RandomGenerator.ArbitrarilyJumpableGenerator
对象进行迭代跳跃生成的所有对象在统计上是相互独立的,并且在个体上是均匀的,前提是它们不遍历状态周期的重叠部分。实际上,人们必须接受对独立性和均匀性的某种近似。特别地,特定实现可以假定由jump
()方法生成的流中的每个生成器用于生成不超过指定跳跃距离的值。建议实现者使用周期至少为2127的算法。
对于许多应用程序,向前跳跃一个二的幂或某个二的幂的小倍数就足够了,但是这个二的幂可能无法表示为long
值。为了避免使用BigInteger
值作为跳跃距离,而是使用double
值。
提供了执行单个跳跃操作以及通过内部状态的迭代复制和跳跃生成原始生成器流的方法。多线程应用程序的典型策略是创建一个单一的RandomGenerator.ArbitrarilyJumpableGenerator
对象,仅调用其jump
()方法一次,然后从生成的流中分配生成器,每个线程一个。然而,每个生成器也是类型为RandomGenerator.ArbitrarilyJumpableGenerator
;经过谨慎处理,可以使用不同的跳跃距离以各种方式遍历整个状态周期。
实现RandomGenerator.ArbitrarilyJumpableGenerator
的对象通常不是密码安全的。考虑改用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()
返回一个新的生成器,其内部状态与此生成器的确切副本相同(因此如果经历相同系列操作,则它们的未来行为应该是相同的)。copyAndJump
(double distance) 复制此生成器,将此生成器向前跳跃,然后返回副本。default void
jump()
更改此伪随机数生成器的状态,以便在其状态周期内向前跳跃一个大的固定距离(通常为264或更多)。void
jump
(double distance) 更改此伪随机数生成器的状态,以便在其状态周期内向前跳跃指定距离。void
jumpPowerOfTwo
(int logDistance) 更改此伪随机数生成器的状态,以便在其状态周期内向前跳跃等于2logDistance
的距离。jumps
(double distance) 返回一个有效无限的新伪随机数生成器流,每个生成器实现RandomGenerator.ArbitrarilyJumpableGenerator
接口,通过以指定跳跃距离的不同整数倍跳跃此生成器的副本而生成。jumps
(long streamSize, double distance) 返回一个产生给定streamSize
数量的新伪随机数生成器流,每个生成器实现RandomGenerator.ArbitrarilyJumpableGenerator
接口,通过以不同整数倍的指定跳跃距离跳跃此生成器的副本而生成。default void
leap()
更改此伪随机数生成器的状态,以便在其状态周期内向前一个非常大的固定距离(通常为2128或更多)。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, jumpDistance, jumps, jumps, rngs, rngs
Methods declared in interface java.util.random.RandomGenerator.LeapableGenerator
copyAndLeap, leapDistance, leaps, leaps
-
Method Details
-
of
- 参数:
-
name
- 随机数生成器的名称算法 - 返回:
-
RandomGenerator.ArbitrarilyJumpableGenerator
的一个实例 - 抛出:
-
NullPointerException
- 如果名称为null -
IllegalArgumentException
- 如果找不到指定的算法
-
copy
返回一个新的生成器,其内部状态与此生成器的确切副本相同(因此如果经历相同系列操作,则它们的未来行为应该是相同的)。- 指定者:
-
copy
在接口RandomGenerator.JumpableGenerator
- 指定者:
-
copy
在接口RandomGenerator.LeapableGenerator
- 返回:
- 一个新对象,是此生成器的副本
-
jumpPowerOfTwo
void jumpPowerOfTwo(int logDistance) 更改此伪随机数生成器的状态,以便在其状态周期内向前一个等于2logDistance
的距离。- 参数:
-
logDistance
- 要在状态周期内向前跳跃的距离的以2为底的对数 - 抛出:
-
IllegalArgumentException
- 如果logDistance
是2logDistance
大于此生成器的周期
-
jump
void jump(double distance) 更改此伪随机数生成器的状态,以便在其状态周期内向前跳跃指定距离。- 参数:
-
distance
- 在状态周期内向前跳跃的距离 - 抛出:
-
IllegalArgumentException
- 如果distance
不大于或等于0.0,或者大于此生成器的周期
-
jump
default void jump()更改此伪随机数生成器的状态,以便在其状态周期内向前一个大的固定距离(通常为264或更多)。使用的距离是方法jumpDistance
()返回的距离。- 指定者:
-
jump
在接口RandomGenerator.JumpableGenerator
- 实现要求:
- 默认实现调用jump(jumpDistance())。
-
jumps
返回一个有效无限的新伪随机数生成器流,每个生成器实现RandomGenerator.ArbitrarilyJumpableGenerator
接口,通过以不同整数倍的指定跳跃距离跳跃此生成器的副本而生成。- 实现要求:
-
默认实现等效于
jumps
(Long.MAX_VALUE
)。 - 参数:
-
distance
- 在状态周期内向前跳跃的距离 - 返回:
-
一个产生实现
RandomGenerator
接口的对象流 - 抛出:
-
IllegalArgumentException
- 如果distance
不大于或等于0.0,或者大于此生成器的周期
-
jumps
default Stream<RandomGenerator.ArbitrarilyJumpableGenerator> jumps(long streamSize, double distance) 返回一个产生给定streamSize
数量的新伪随机数生成器流,每个生成器实现RandomGenerator.ArbitrarilyJumpableGenerator
接口,通过以不同整数倍的指定跳跃距离跳跃此生成器的副本而生成。- 实现要求:
- 默认实现等同于 jumps(distance).limit(streamSize).
- 参数:
-
streamSize
- 要生成的生成器数量 -
distance
- 在状态循环内向前跳跃的距离 - 返回:
-
一个实现了
RandomGenerator
接口的对象流 - 抛出:
-
IllegalArgumentException
- 如果streamSize
小于零或者distance
不大于或等于0.0,或者大于此生成器的周期
-
leap
default void leap()改变这个伪随机数生成器的状态,使其在其状态循环内向前跳跃一个非常大的固定距离(通常为2128或更多)。使用的距离是方法leapDistance
()返回的距离。- 指定者:
-
leap
在接口RandomGenerator.LeapableGenerator
-
copyAndJump
复制此生成器,将此生成器向前跳跃,然后返回副本。- 实现要求:
- 默认实现复制此生成器,跳跃(distance),然后返回副本。
- 参数:
-
distance
- 在状态循环内向前跳跃的距离 - 返回:
- 跳跃发生前此生成器对象的副本
- 抛出:
-
IllegalArgumentException
- 如果distance
不大于或等于0.0,或者大于此生成器的周期
-