java.lang.Object
java.util.SplittableRandom
public final class SplittableRandom extends Object implements RandomGenerator, RandomGenerator.SplittableGenerator
一种生成均匀伪随机值(周期为264)的生成器,适用于(除其他情况外)可能生成子任务的隔离并行计算。类
SplittableRandom
支持生成int
、long
和double
类型的伪随机数的方法,用法类似于类Random
,但在以下方面有所不同:
- 生成的值系列通过DieHarder套件测试随机数生成器的独立性和均匀性属性。(最近验证版本为版本3.31.1。)这些测试仅验证某些类型和范围的方法,但预计其他类型的方法也至少近似具有相似的属性。生成的值系列的周期(在重复之前生成的任何值系列的长度)为264。
- 方法
split()
构造并返回一个与当前实例不共享可变状态的新SplittableRandom实例。然而,极高的概率是,两个对象共同生成的值集合具有与单个线程使用单个SplittableRandom
对象生成相同数量的值时相同的统计属性。 - SplittableRandom的实例不是线程安全的。它们被设计为在线程之间分割,而不是共享。例如,使用随机数的
fork/join-style
计算可能包括以下形式的构造:new Subtask(aSplittableRandom.split()).fork()
。 - 该类提供了用于在
stream.parallel()
模式下使用时采用上述技术的生成随机流的附加方法。
SplittableRandom
的实例不具有密码学安全性。在对安全敏感的应用程序中,考虑使用SecureRandom
。此外,默认构造的实例不使用密码学随机种子,除非将系统属性java.util.secureRandomSeed
设置为true
。
- 自Java版本:
- 1.8
-
Nested Class Summary
Nested classes/interfaces declared in interface java.util.random.RandomGenerator
RandomGenerator.ArbitrarilyJumpableGenerator, RandomGenerator.JumpableGenerator, RandomGenerator.LeapableGenerator, RandomGenerator.SplittableGenerator, RandomGenerator.StreamableGenerator
-
Constructor Summary
ConstructorsConstructorDescription创建一个新的SplittableRandom实例,该实例可能生成与当前程序中任何其他实例的值统计独立的值序列;并且可能在程序调用之间变化,通常会变化。SplittableRandom
(long seed) 使用指定的初始种子创建一个新的SplittableRandom实例。 -
Method Summary
Modifier and TypeMethodDescriptiondoubles()
从此生成器和/或从中分割出的一个生成器返回一个有效无限的伪随机double
值流;每个值介于零(包括)和一(不包括)之间。doubles
(double randomNumberOrigin, double randomNumberBound) 从此生成器和/或从中分割出的一个生成器返回一个有效无限的伪随机double
值流;每个值符合给定的起始值(包括)和边界值(不包括)。doubles
(long streamSize) 返回一个流,产生给定数量的伪随机double
值流从此生成器和/或从中分割出的一个生成器;每个值介于零(包括)和一(不包括)之间。doubles
(long streamSize, double randomNumberOrigin, double randomNumberBound) 返回一个流,产生给定数量的伪随机double
值流从此生成器和/或从中分割出的一个生成器;每个值符合给定的起始值(包括)和边界值(不包括)。ints()
返回一个有效无限的从此生成器和/或从中分割出的一个生成器产生的伪随机int
值流。ints
(int randomNumberOrigin, int randomNumberBound) 返回一个有效无限的从此生成器和/或从中分割出的一个生成器产生的伪随机int
值流;每个值符合给定的起始值(包括)和边界值(不包括)。ints
(long streamSize) 返回一个流,产生给定数量的从此生成器和/或从中分割出的一个生成器产生的伪随机int
值流。ints
(long streamSize, int randomNumberOrigin, int randomNumberBound) 返回一个流,产生给定数量的从此生成器和/或从中分割出的一个生成器产生的伪随机int
值流;每个值符合给定的起始值(包括)和边界值(不包括)。longs()
返回一个有效无限的从此生成器和/或从中分割出的一个生成器产生的伪随机long
值流。longs
(long streamSize) 返回一个流,产生给定数量的从此生成器和/或从中分割出的一个生成器产生的伪随机long
值流。longs
(long randomNumberOrigin, long randomNumberBound) 返回一个有效无限的从此生成器和/或从中分割出的一个生成器产生的伪随机long
值流;每个值符合给定的起始值(包括)和边界值(不包括)。longs
(long streamSize, long randomNumberOrigin, long randomNumberBound) 返回一个流,产生给定数量的从此生成器和/或从中分割出的一个生成器产生的伪随机long
值流;每个值符合给定的起始值(包括)和边界值(不包括)。void
nextBytes
(byte[] bytes) 使用从值范围在-128(包括)和127(包括)之间均匀随机选择的生成字节值填充用户提供的字节数组。long
nextLong()
返回一个随机选择的long
值。split()
构造并返回一个与此实例不共享可变状态的新SplittableRandom实例。返回一个新的伪随机数生成器,从此生成器分割出来,实现了RandomGenerator
和RandomGenerator.SplittableGenerator
接口。splits()
返回一个有效无限的新伪随机数生成器流,每个生成器实现了RandomGenerator.SplittableGenerator
接口。splits
(long streamSize) 返回一个流,产生给定数量的新伪随机数生成器流,每个生成器实现了RandomGenerator.SplittableGenerator
接口。splits
(long streamSize, RandomGenerator.SplittableGenerator source) 返回一个流,产生给定数量的新伪随机数生成器流,每个生成器实现了RandomGenerator.SplittableGenerator
接口。返回一个有效无限的新伪随机数生成器流,每个生成器实现了RandomGenerator.SplittableGenerator
接口。Methods declared in class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods declared in interface java.util.random.RandomGenerator
isDeprecated, nextBoolean, nextDouble, nextDouble, nextDouble, nextExponential, nextFloat, nextFloat, nextFloat, nextGaussian, nextGaussian, nextInt, nextInt, nextInt, nextLong, nextLong
Methods declared in interface java.util.random.RandomGenerator.SplittableGenerator
rngs, rngs
-
Constructor Details
-
SplittableRandom
public SplittableRandom(long seed) 使用指定的初始种子创建一个新的SplittableRandom实例。在同一程序中使用相同种子创建的SplittableRandom实例会生成相同的值序列。- 参数:
-
seed
- 初始种子
-
SplittableRandom
public SplittableRandom()创建一个新的SplittableRandom实例,该实例可能生成与当前程序中任何其他实例的值统计独立的值序列;并且可能在程序调用之间变化,通常会变化。
-
-
Method Details
-
split
构造并返回一个与此实例不共享可变状态的新SplittableRandom实例。然而,极高的概率是,两个对象共同生成的值集合具有与单个线程使用单个SplittableRandom对象生成相同数量的值时相同的统计属性。两个对象中的任何一个或两个对象都可以使用split()
方法进一步分割,并且这种递归分割构造的所有生成器集合都具有相同的预期统计属性。- 指定者:
-
split
在接口RandomGenerator.SplittableGenerator
- 返回:
- 新的SplittableRandom实例
-
split
返回一个新的从此生成器分割出来的伪随机数生成器,实现了RandomGenerator
和RandomGenerator.SplittableGenerator
接口。- 指定者:
-
split
在接口RandomGenerator.SplittableGenerator
- 参数:
-
source
- 一个RandomGenerator.SplittableGenerator
实例,用于初始化新实例状态的伪随机位的源。 - 返回:
-
一个实现了
RandomGenerator
和RandomGenerator.SplittableGenerator
接口的对象 - 抛出:
-
NullPointerException
- 如果source为null - 自Java版本:
- 17
-
nextLong
public long nextLong()从接口复制的描述:RandomGenerator
返回一个随机选择的long
值。- 指定者:
-
nextLong
在接口RandomGenerator
中 - 返回值:
-
一个伪随机选择的
long
值
-
nextBytes
public void nextBytes(byte[] bytes) 用生成的字节值填充用户提供的字节数组,这些字节值是从-128(包括)到127(包括)之间均匀伪随机选择的。- 指定者:
-
nextBytes
在接口RandomGenerator
中 - 参数:
-
bytes
- 要填充伪随机字节的字节数组 - 抛出:
-
NullPointerException
- 如果字节数组为null - 自版本:
- 10
-
splits
返回一个有效无限的新伪随机数生成器流,每个流实现RandomGenerator.SplittableGenerator
接口。此伪随机数生成器可用作用于初始化新状态的伪随机位的源。
- 指定者:
-
splits
在接口RandomGenerator.SplittableGenerator
中 - 实现要求:
-
默认实现调用
splits(this)
。 - 返回值:
-
一个流的
RandomGenerator.SplittableGenerator
对象 - 自版本:
- 17
-
splits
返回一个流,生成给定数量的新伪随机数生成器,每个生成器实现RandomGenerator.SplittableGenerator
接口。此伪随机数生成器可用作用于初始化新状态的伪随机位的源。
- 指定者:
-
splits
在接口RandomGenerator.SplittableGenerator
中 - 实现要求:
- 参数:
-
streamSize
- 要生成的值的数量 - 返回值:
-
一个流的
RandomGenerator.SplittableGenerator
对象 - 抛出:
-
IllegalArgumentException
- 如果streamSize
小于零 - 自版本:
- 17
-
splits
public Stream<RandomGenerator.SplittableGenerator> splits(RandomGenerator.SplittableGenerator source) 返回一个有效无限的新伪随机数生成器流,每个流实现RandomGenerator.SplittableGenerator
接口。- 指定者:
-
splits
在接口RandomGenerator.SplittableGenerator
中 - 实现要求:
- 参数:
-
source
- 一个RandomGenerator.SplittableGenerator
实例,用于作为初始化新状态的伪随机位的源,而不是此实例。 - 返回值:
-
一个流的
RandomGenerator.SplittableGenerator
对象 - 抛出:
-
NullPointerException
- 如果源为null - 自版本:
- 17
-
splits
public Stream<RandomGenerator.SplittableGenerator> splits(long streamSize, RandomGenerator.SplittableGenerator source) 返回一个流,生成给定数量的新伪随机数生成器,每个生成器实现RandomGenerator.SplittableGenerator
接口。- 指定者:
-
splits
在接口RandomGenerator.SplittableGenerator
中 - 实现要求:
- 参数:
-
streamSize
- 要生成的值的数量 -
source
- 一个RandomGenerator.SplittableGenerator
实例,用于作为初始化新状态的伪随机位的源,而不是此实例。 - 返回值:
-
一个流的
RandomGenerator.SplittableGenerator
对象 - 抛出:
-
NullPointerException
- 如果源为null -
IllegalArgumentException
- 如果streamSize
小于零 - 自版本:
- 17
-
ints
返回一个流,生成给定数量的伪随机int
值,从此生成器和/或其一个拆分中获取。- 指定者:
-
ints
在接口RandomGenerator
中 - 参数:
-
streamSize
- 要生成的值的数量 - 返回值:
-
一个流的伪随机
int
值 - 抛出:
-
IllegalArgumentException
- 如果streamSize
小于零
-
ints
返回一个有效无限的伪随机int
值流,从此生成器和/或其一个拆分中获取。- 指定者:
-
ints
在接口RandomGenerator
中 - 实现说明:
-
此方法实现为等效于
ints(Long.MAX_VALUE)
。 - 返回值:
-
一个流的伪随机
int
值
-
ints
返回一个流,生成给定数量的伪随机int
值,从此生成器和/或其一个拆分中获取;每个值符合给定的起始值(包括)和边界值(不包括)。- 指定者:
-
ints
在接口RandomGenerator
中 - 参数:
-
streamSize
- 要生成的值的数量 -
randomNumberOrigin
- 每个随机值的起始值(包括) -
randomNumberBound
- 每个随机值的边界值(不包括) - 返回值:
-
一个流的伪随机
int
值,每个值具有给定的起始值(包括)和边界值(不包括) - 抛出:
-
IllegalArgumentException
- 如果streamSize
小于零,或者randomNumberOrigin
大于或等于randomNumberBound
-
ints
返回一个有效无限的伪随机int
值流,从此生成器和/或其一个拆分中获取;每个值符合给定的起始值(包括)和边界值(不包括)。- 指定者:
-
ints
在接口RandomGenerator
中 - 实现说明:
-
此方法实现为等效于
ints(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound)
。 - 参数:
-
randomNumberOrigin
- 每个随机值的起始值(包括) -
randomNumberBound
- 每个随机值的边界值(不包括) - 返回值:
-
一个流的伪随机
int
值,每个值具有给定的起始值(包括)和边界值(不包括) - 抛出:
-
IllegalArgumentException
- 如果randomNumberOrigin
大于或等于randomNumberBound
-
longs
返回一个流,生成给定数量的伪随机long
值,从此生成器和/或其一个拆分中获取。- 指定者:
-
longs
在接口RandomGenerator
中 - 参数:
-
streamSize
- 要生成的值的数量 - 返回值:
-
一个流的伪随机
long
值 - 抛出:
-
IllegalArgumentException
- 如果streamSize
小于零
-
longs
返回此生成器和/或其分裂中的一个有效无限流的伪随机long
值。- 指定者:
-
longs
在接口RandomGenerator
- 实现说明:
-
此方法被实现为等同于
longs(Long.MAX_VALUE)
。 - 返回:
-
一系列伪随机
long
值
-
longs
返回一个流,生成给定数量的伪随机long
值,这些值来自此生成器和/或其分裂中的一个;每个值符合给定的原点(包括)和边界(不包括)。- 指定者:
-
longs
在接口RandomGenerator
- 参数:
-
streamSize
- 要生成的值的数量 -
randomNumberOrigin
- 每个随机值的原点(包括) -
randomNumberBound
- 每个随机值的边界(不包括) - 返回:
-
一系列伪随机
long
值,每个值具有给定的原点(包括)和边界(不包括) - 抛出:
-
IllegalArgumentException
- 如果streamSize
小于零,或randomNumberOrigin
大于或等于randomNumberBound
-
longs
返回此生成器和/或其分裂中的一个有效无限流的伪随机long
值;每个值符合给定的原点(包括)和边界(不包括)。- 指定者:
-
longs
在接口RandomGenerator
- 实现说明:
-
此方法被实现为等同于
longs(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound)
。 - 参数:
-
randomNumberOrigin
- 每个随机值的原点(包括) -
randomNumberBound
- 每个随机值的边界(不包括) - 返回:
-
一系列伪随机
long
值,每个值具有给定的原点(包括)和边界(不包括) - 抛出:
-
IllegalArgumentException
- 如果randomNumberOrigin
大于或等于randomNumberBound
-
doubles
返回一个流,生成给定数量的伪随机double
值,这些值来自此生成器和/或其分裂中的一个;每个值介于零(包括)和一(不包括)之间。- 指定者:
-
doubles
在接口RandomGenerator
- 参数:
-
streamSize
- 要生成的值的数量 - 返回:
-
一系列
double
值的流 - 抛出:
-
IllegalArgumentException
- 如果streamSize
小于零
-
doubles
返回此生成器和/或其分裂中的一个有效无限流的伪随机double
值;每个值介于零(包括)和一(不包括)之间。- 指定者:
-
doubles
在接口RandomGenerator
- 实现说明:
-
此方法被实现为等同于
doubles(Long.MAX_VALUE)
。 - 返回:
-
一系列伪随机
double
值的流
-
doubles
返回一个流,生成给定数量的伪随机double
值,这些值来自此生成器和/或其分裂中的一个;每个值符合给定的原点(包括)和边界(不包括)。- 指定者:
-
doubles
在接口RandomGenerator
- 参数:
-
streamSize
- 要生成的值的数量 -
randomNumberOrigin
- 每个随机值的原点(包括) -
randomNumberBound
- 每个随机值的边界(不包括) - 返回:
-
一系列伪随机
double
值,每个值具有给定的原点(包括)和边界(不包括) - 抛出:
-
IllegalArgumentException
- 如果streamSize
小于零,或randomNumberOrigin
不是有限的,或randomNumberBound
不是有限的,或randomNumberOrigin
大于或等于randomNumberBound
-
doubles
返回此生成器和/或其分裂中的一个有效无限流的伪随机double
值;每个值符合给定的原点(包括)和边界(不包括)。- 指定者:
-
doubles
在接口RandomGenerator
- 实现说明:
-
此方法被实现为等同于
doubles(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound)
。 - 参数:
-
randomNumberOrigin
- 每个随机值的原点(包括) -
randomNumberBound
- 每个随机值的边界(不包括) - 返回:
-
一系列伪随机
double
值,每个值具有给定的原点(包括)和边界(不包括) - 抛出:
-
IllegalArgumentException
- 如果randomNumberOrigin
不是有限的,或randomNumberBound
不是有限的,或randomNumberOrigin
大于或等于randomNumberBound
-