SplittableRandom
java.lang.Object
|—java.util.SplittableRandom
public final class SplittableRandom
extends Object
适用于(在其他上下文中)可能生成子任务的隔离并行计算的统一伪随机值生成器。 SplittableRandom 类支持产生 int、long 和 double 类型的伪随机数的方法,其用法与类 Random 类似,但在以下方面有所不同:
- 一系列生成的值通过了 DieHarder 套件测试随机数生成器的独立性和一致性属性。 (最近使用版本 3.31.1 进行了验证。)这些测试仅验证某些类型和范围的方法,但预计类似的属性也至少大致适用于其他属性。周期(任何一系列生成值在重复之前的长度)至少为 264。
- 方法 split() 构造并返回一个新的 SplittableRandom 实例,该实例与当前实例不共享可变状态。但是,两个对象共同生成的值很有可能具有相同的统计属性,就好像单个线程使用单个 SplittableRandom 对象生成相同数量的值一样。
- SplittableRandom 的实例不是线程安全的。它们被设计为跨线程拆分而不是共享。例如,使用随机数的 fork/join 式计算可能包括 new Subtask(aSplittableRandom.split()).fork() 形式的构造。
- 此类提供用于生成随机流的附加方法,在 stream.parallel() 模式下使用时采用上述技术。
SplittableRandom 的实例在密码学上不是安全的。 考虑在安全敏感的应用程序中使用 SecureRandom。 此外,默认构造的实例不使用加密随机种子,除非 System#getProperty java.util.secureRandomSeed 设置为 true。
构造函数摘要
构造函数 | 描述 |
---|---|
SplittableRandom() | 创建一个新的 SplittableRandom 实例,该实例可能生成在统计上独立于当前程序中任何其他实例的值序列; 并且可能并且通常确实会因程序调用而异。 |
SplittableRandom(long seed) | 使用指定的初始种子创建一个新的 SplittableRandom 实例。 |
方法总结
修饰符和类型 | 方法 | 描述 |
---|---|---|
DoubleStream | doubles() | 从这个生成器和/或从它的一个拆分返回一个有效无限的伪随机双值流; 每个值都介于零(包括)和一(不包括)之间。 |
DoubleStream | doubles(double randomNumberOrigin, double randomNumberBound) | 从这个生成器和/或从它的一个拆分返回一个有效无限的伪随机双值流; 每个值都符合给定的原点(包括)和绑定(不包括)。 |
DoubleStream | doubles(long streamSize) | 返回一个流,该流产生给定的 streamSize 数量的伪随机双精度值,从这个生成器和/或一个拆分; 每个值都介于零(包括)和一(不包括)之间。 |
DoubleStream | doubles(long streamSize, double randomNumberOrigin, double randomNumberBound) | 返回一个流,该流产生给定的 streamSize 数量的伪随机双精度值,从这个生成器和/或一个拆分; 每个值都符合给定的原点(包括)和绑定(不包括)。 |
IntStream | ints() | 从这个生成器和/或从它的一个拆分返回一个有效无限的伪随机 int 值流。 |
IntStream | ints(int randomNumberOrigin, int randomNumberBound) | 从这个生成器和/或从它的一个拆分返回一个有效无限的伪随机 int 值流; 每个值都符合给定的原点(包括)和绑定(不包括)。 |
IntStream | ints(long streamSize) | 返回一个流,该流产生给定的 streamSize 数量的伪随机 int 值,从这个生成器和/或从中拆分出来。 |
IntStream | ints(long streamSize, int randomNumberOrigin, int randomNumberBound) | 返回一个流,该流产生给定的 streamSize 数量的伪随机 int 值,从这个生成器和/或从它的一个拆分; 每个值都符合给定的原点(包括)和绑定(不包括)。 |
LongStream | longs() | 从这个生成器和/或从它的一个拆分返回一个有效无限的伪随机长值流。 |
LongStream | longs(long streamSize) | 返回一个流,该流产生给定的 streamSize 数量的伪随机 long 值,从这个生成器和/或从它的一个拆分。 |
LongStream | longs(long randomNumberOrigin, long randomNumberBound) | 从这个生成器和/或从它的一个拆分返回一个有效无限的伪随机长值流; 每个值都符合给定的原点(包括)和绑定(不包括)。 |
LongStream | longs(long streamSize, long randomNumberOrigin, long randomNumberBound) | 返回一个流,该流产生给定的 streamSize 数量的伪随机长值,从这个生成器和/或从中拆分出来; 每个值都符合给定的原点(包括)和绑定(不包括)。 |
boolean | nextBoolean() | 返回一个伪随机布尔值。 |
double | nextDouble() | 返回零(包括)和一(不包括)之间的伪随机双精度值。 |
double | nextDouble(double bound) | 返回介于 0.0(包括)和指定边界(不包括)之间的伪随机双精度值。 |
double | nextDouble(double origin, double bound) | 返回指定原点(包括)和边界(不包括)之间的伪随机双精度值。 |
int | nextInt() | 返回一个伪随机 int 值。 |
int | nextInt(int bound) | 返回零(包括)和指定边界(不包括)之间的伪随机 int 值。 |
int | nextInt(int origin, int bound) | 返回指定原点(包括)和指定边界(不包括)之间的伪随机 int 值。 |
long | nextLong() | 返回一个伪随机长值。 |
long | nextLong(long bound) | 返回零(包括)和指定边界(不包括)之间的伪随机长值。 |
long | nextLong(long origin, long bound) | 返回指定原点(包括)和指定边界(不包括)之间的伪随机长值。 |
SplittableRandom | split() | 构造并返回一个新的 SplittableRandom 实例,该实例不与此实例共享可变状态。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
构造函数详细信息
SplittableRandom
public SplittableRandom(long seed)
使用指定的初始种子创建一个新的 SplittableRandom 实例。 在同一程序中使用相同种子创建的 SplittableRandom 实例会生成相同的值序列。
参数:
参数名称 | 参数描述 |
---|---|
seed | 最初的种子 |
SplittableRandom
public SplittableRandom()
创建一个新的 SplittableRandom 实例,该实例可能生成在统计上独立于当前程序中任何其他实例的值序列; 并且可能并且通常确实会因程序调用而异。
方法详情
split
public SplittableRandom split()
构造并返回一个新的 SplittableRandom 实例,该实例不与此实例共享可变状态。 但是,两个对象共同生成的值集具有非常高的概率具有相同的统计属性,就好像单个线程使用单个 SplittableRandom 对象生成相同数量的值一样。 可以使用 split() 方法进一步拆分两个对象中的一个或两个,并且相同的预期统计属性适用于通过这种递归拆分构造的整个生成器集。
返回:
新的 SplittableRandom 实例
nextInt
public int nextInt()
返回一个伪随机 int 值。
返回:
一个伪随机 int 值
nextInt
public int nextInt(int bound)
返回零(包括)和指定边界(不包括)之间的伪随机 int 值。
参数:
参数名称 | 参数描述 |
---|---|
bound | 上限(不包括)。 必须是积极的。 |
返回:
零(包括)和边界(不包括)之间的伪随机 int 值
Throws:
Throw名称 | Throw描述 |
---|---|
IllegalArgumentException | 如果 bound 不是正数 |
nextInt
public int nextInt(int origin, int bound)
返回指定原点(包括)和指定边界(不包括)之间的伪随机 int 值。
参数:
参数名称 | 参数描述 |
---|---|
origin | 返回的最小值 |
bound | 上限(不包括) |
返回:
原点(包括)和边界(不包括)之间的伪随机 int 值
Throws:
Throw名称 | Throw描述 |
---|---|
IllegalArgumentException | 如果 origin 大于或等于 bound |
nextLong
public long nextLong()
返回一个伪随机长值。
返回:
伪随机长值
nextLong
public long nextLong(long bound)
返回零(包括)和指定边界(不包括)之间的伪随机长值。
参数:
参数名称 | 参数描述 |
---|---|
bound | 上限(不包括)。 必须是积极的。 |
返回:
零(包括)和边界(不包括)之间的伪随机长值
Throws:
Throw名称 | Throw描述 |
---|---|
IllegalArgumentException | 如果 bound 不是正数 |
nextLong
public long nextLong(long origin, long bound)
返回指定原点(包括)和指定边界(不包括)之间的伪随机长值。
参数:
参数名称 | 参数描述 |
---|---|
origin | 返回的最小值 |
bound | 上限(不包括) |
返回:
原点(包括)和边界(不包括)之间的伪随机长值
Throws:
Throw名称 | Throw描述 |
---|---|
IllegalArgumentException | 如果 origin 大于或等于 bound |
nextDouble
public double nextDouble()
返回零(包括)和一(不包括)之间的伪随机双精度值。
返回:
零(包括)和一(不包括)之间的伪随机双精度值
nextDouble
public double nextDouble(double bound)
返回介于 0.0(包括)和指定边界(不包括)之间的伪随机双精度值。
参数:
参数名称 | 参数描述 |
---|---|
bound | 上限(不包括)。 必须是积极的。 |
返回:
零(包括)和边界(不包括)之间的伪随机双精度值
Throws:
Throw名称 | Throw描述 |
---|---|
IllegalArgumentException | 如果 bound 不是正数 |
nextDouble
public double nextDouble(double origin, double bound)
返回指定原点(包括)和边界(不包括)之间的伪随机双精度值。
参数:
参数名称 | 参数描述 |
---|---|
origin | 返回的最小值 |
bound | 上限(不包括) |
返回:
原点(包括)和边界(不包括)之间的伪随机双精度值
Throws:
Throw名称 | Throw描述 |
---|---|
IllegalArgumentException | 如果 origin 大于或等于 bound |
nextBoolean
public boolean nextBoolean()
返回一个伪随机布尔值。
返回:
一个伪随机布尔值
ints
public IntStream ints(long streamSize)
返回一个流,该流产生给定的 streamSize 数量的伪随机 int 值,从这个生成器和/或从中拆分出来。
参数:
参数名称 | 参数描述 |
---|---|
streamSize | 要生成的值的数量 |
返回:
伪随机 int 值流
Throws:
Throw名称 | Throw描述 |
---|---|
IllegalArgumentException | 如果 streamSize 小于零 |
ints
public IntStream ints()
从这个生成器和/或从它的一个拆分返回一个有效无限的伪随机 int 值流。
返回:
伪随机 int 值流
ints
public IntStream ints(long streamSize, int randomNumberOrigin, int randomNumberBound)
返回一个流,该流产生给定的 streamSize 数量的伪随机 int 值,从这个生成器和/或从它的一个拆分; 每个值都符合给定的原点(包括)和绑定(不包括)。
参数:
参数名称 | 参数描述 |
---|---|
streamSize | 要生成的值的数量 |
randomNumberOrigin | 每个随机值的原点(包括) |
randomNumberBound | 每个随机值的界限(不包括) |
返回:
一个伪随机 int 值流,每个值都具有给定的原点(包括)和边界(不包括)
Throws:
Throw名称 | Throw描述 |
---|---|
IllegalArgumentException | 如果 streamSize 小于零,或者 randomNumberOrigin 大于或等于 randomNumberBound |
ints
public IntStream ints(int randomNumberOrigin, int randomNumberBound)
从这个生成器和/或从它的一个拆分返回一个有效无限的伪随机 int 值流; 每个值都符合给定的原点(包括)和绑定(不包括)。
参数:
参数名称 | 参数描述 |
---|---|
randomNumberOrigin | 每个随机值的原点(包括) |
randomNumberBound | 每个随机值的界限(不包括) |
返回:
一个伪随机 int 值流,每个值都具有给定的原点(包括)和边界(不包括)
Throws:
Throw名称 | Throw描述 |
---|---|
IllegalArgumentException | 如果 randomNumberOrigin 大于或等于 randomNumberBound |
longs
public LongStream longs(long streamSize)
返回一个流,该流产生给定的 streamSize 数量的伪随机 long 值,从这个生成器和/或从它的一个拆分。
参数:
参数名称 | 参数描述 |
---|---|
streamSize | 要生成的值的数量 |
返回:
伪随机长值流
Throws:
Throw名称 | Throw描述 |
---|---|
IllegalArgumentException | 如果 streamSize 小于零 |
longs
public LongStream longs()
从这个生成器和/或从它的一个拆分返回一个有效无限的伪随机长值流。
返回:
伪随机长值流
longs
public LongStream longs(long streamSize, long randomNumberOrigin, long randomNumberBound)
返回一个流,该流产生给定的 streamSize 数量的伪随机长值,从这个生成器和/或从中拆分出来; 每个值都符合给定的原点(包括)和绑定(不包括)。
参数:
参数名称 | 参数描述 |
---|---|
streamSize | 要生成的值的数量 |
randomNumberOrigin | 每个随机值的原点(包括) |
randomNumberBound | 每个随机值的界限(不包括) |
返回:
一个伪随机长值流,每个值都具有给定的原点(包括)和边界(不包括)
Throws:
Throw名称 | Throw描述 |
---|---|
IllegalArgumentException | 如果 streamSize 小于零,或者 randomNumberOrigin 大于或等于 randomNumberBound |
longs
public LongStream longs(long randomNumberOrigin, long randomNumberBound)
从这个生成器和/或从它的一个拆分返回一个有效无限的伪随机长值流; 每个值都符合给定的原点(包括)和绑定(不包括)。
参数:
参数名称 | 参数描述 |
---|---|
randomNumberOrigin | 每个随机值的原点(包括) |
randomNumberBound | 每个随机值的界限(不包括) |
返回:
一个伪随机长值流,每个值都具有给定的原点(包括)和边界(不包括)
Throws:
Throw名称 | Throw描述 |
---|---|
IllegalArgumentException | 如果 randomNumberOrigin 大于或等于 randomNumberBound |
doubles
public DoubleStream doubles(long streamSize)
返回一个流,该流产生给定的 streamSize 数量的伪随机双精度值,从这个生成器和/或一个拆分; 每个值都介于零(包括)和一(不包括)之间。
参数:
参数名称 | 参数描述 |
---|---|
streamSize | 要生成的值的数量 |
返回:
双值流
Throws:
Throw名称 | Throw描述 |
---|---|
IllegalArgumentException | 如果 streamSize 小于零 |
doubles
public DoubleStream doubles()
从这个生成器和/或从它的一个拆分返回一个有效无限的伪随机双值流; 每个值都介于零(包括)和一(不包括)之间。
返回:
伪随机双值流
doubles
public DoubleStream doubles(long streamSize, double randomNumberOrigin, double randomNumberBound)
返回一个流,该流产生给定的 streamSize 数量的伪随机双精度值,从这个生成器和/或一个拆分; 每个值都符合给定的原点(包括)和绑定(不包括)。
参数:
参数名称 | 参数描述 |
---|---|
streamSize | 要生成的值的数量 |
randomNumberOrigin | 每个随机值的原点(包括) |
randomNumberBound | 每个随机值的界限(不包括) |
返回:
一个伪随机双值流,每个都有给定的原点(包括)和边界(不包括)
Throws:
Throw名称 | Throw描述 |
---|---|
IllegalArgumentException | 如果 streamSize 小于零 |
IllegalArgumentException | 如果 randomNumberOrigin 大于或等于 randomNumberBound |
doubles
public DoubleStream doubles(double randomNumberOrigin, double randomNumberBound)
从这个生成器和/或从它的一个拆分返回一个有效无限的伪随机双值流; 每个值都符合给定的原点(包括)和绑定(不包括)。
参数:
参数名称 | 参数描述 |
---|---|
randomNumberOrigin | 每个随机值的原点(包括) |
randomNumberBound | 每个随机值的界限(不包括) |
返回:
一个伪随机双值流,每个都有给定的原点(包括)和边界(不包括)
Throws:
Throw名称 | Throw描述 |
---|---|
IllegalArgumentException | 如果 randomNumberOrigin 大于或等于 randomNumberBound |