模块 java.base
 java.util

类 SplittableRandom

java.lang.Object
java.util.SplittableRandom
所有已实现的接口:
RandomGenerator , RandomGenerator.SplittableGenerator , RandomGenerator.StreamableGenerator

public final class SplittableRandom extends Object implements RandomGenerator , RandomGenerator.SplittableGenerator
统一伪随机值的生成器(周期为 264) 适用于(在其他上下文中)可能生成子任务的孤立并行计算。类 SplittableRandom 支持生成类型为 intlongdouble 的伪随机数的方法,其用法与类 Random 类似,但在以下方面有所不同:
  • 一系列生成的值通过了 DieHarder 套件测试随机数生成器的独立性和均匀性属性。 (最近使用 版本 3.31.1 进行了验证。)这些测试仅验证了某些类型和范围的方法,但类似的属性预计也适用于其他类型和范围,至少近似地适用于其他类型。 period(重复之前任何一系列生成值的长度)是 264.
  • 方法 split() 构造并返回一个新的 SplittableRandom 实例,该实例与当前实例不共享任何可变状态。但是,这两个对象共同生成的值很有可能具有相同的统计属性,就好像单个线程使用单个 SplittableRandom 对象生成相同数量的值一样。
  • SplittableRandom 的实例是 not 线程安全的。它们被设计为跨线程拆分,而不是共享。例如,使用随机数的 fork/join-style 计算可能包括 new Subtask(aSplittableRandom.split()).fork() 形式的构造。
  • 此类提供用于生成随机流的其他方法,这些方法在 stream.parallel() 模式下使用时采用上述技术。

SplittableRandom 的实例不是加密安全的。考虑在对安全敏感的应用程序中使用 SecureRandom 。此外,默认构造的实例不使用加密随机种子,除非 系统属性 java.util.secureRandomSeed 设置为 true

自从:
1.8
  • 构造方法详细信息

    • SplittableRandom

      public SplittableRandom(long seed)
      使用指定的初始种子创建一个新的 SplittableRandom 实例。在同一程序中使用相同种子创建的 SplittableRandom 实例会生成相同的值序列。
      参数:
      seed - 初始种子
    • SplittableRandom

      public SplittableRandom()
      创建一个新的 SplittableRandom 实例,该实例可能会生成在统计上独立于当前程序中任何其他实例的值序列;并且可能并且通常确实会因程序调用而异。
  • 方法详情

    • split

      public SplittableRandom  split()
      构造并返回一个新的 SplittableRandom 实例,该实例不与该实例共享任何可变状态。但是,这两个对象共同生成的值集很有可能具有相同的统计属性,就好像由单个线程使用单个 SplittableRandom 对象生成相同数量的值一样。可以使用split() 方法进一步拆分两个对象中的一个或两个对象,并且相同的预期统计属性适用于通过这种递归拆分构造的整个生成器集。
      指定者:
      split 在接口 RandomGenerator.SplittableGenerator
      返回:
      新的 SplittableRandom 实例
    • split

      返回一个新的伪随机数生成器,从这个生成器中分离出来,它实现了 RandomGenerator RandomGenerator.SplittableGenerator 接口。
      指定者:
      split 在接口 RandomGenerator.SplittableGenerator
      参数:
      source - 一个 RandomGenerator.SplittableGenerator 实例,用于代替这个实例作为伪随机位的来源,用于初始化新位的状态。
      返回:
      实现 RandomGenerator RandomGenerator.SplittableGenerator 接口的对象
      抛出:
      NullPointerException - 如果源为空
      自从:
      17
    • nextLong

      public long nextLong()
      从接口 RandomGenerator 复制的描述
      返回伪随机选择的 long 值。
      指定者:
      nextLong 在接口 RandomGenerator
      返回:
      伪随机选择的 long
    • nextBytes

      public void nextBytes(byte[] bytes)
      使用从 -128(含)和 127(含)之间的值范围内均匀随机选择的生成字节值填充用户提供的字节数组。
      指定者:
      nextBytes 在接口 RandomGenerator
      参数:
      bytes - 用伪随机字节填充的字节数组
      抛出:
      NullPointerException - 如果字节为空
      自从:
      10
    • splits

      返回有效无限的新伪随机数生成器流,每个生成器都实现了 RandomGenerator.SplittableGenerator 接口。

      该伪随机数生成器可用作伪随机位的来源,用于初始化新位的状态。

      指定者:
      splits 在接口 RandomGenerator.SplittableGenerator
      实现要求:
      默认实现调用 splits(this)
      返回:
      RandomGenerator.SplittableGenerator 对象流
      自从:
      17
    • splits

      public Stream <RandomGenerator.SplittableGenerator > splits(long streamSize)
      返回产生给定 streamSize 个新伪随机数生成器的流,每个生成器都实现 RandomGenerator.SplittableGenerator 接口。

      该伪随机数生成器可用作伪随机位的来源,用于初始化新位的状态。

      指定者:
      splits 在接口 RandomGenerator.SplittableGenerator
      实现要求:
      参数:
      streamSize - 要生成的值的数量
      返回:
      RandomGenerator.SplittableGenerator 对象流
      抛出:
      IllegalArgumentException - 如果 streamSize 小于零
      自从:
      17
    • splits

      返回有效无限的新伪随机数生成器流,每个生成器都实现了 RandomGenerator.SplittableGenerator 接口。
      指定者:
      splits 在接口 RandomGenerator.SplittableGenerator
      实现要求:
      参数:
      source - 一个 RandomGenerator.SplittableGenerator 实例,用于代替这个实例作为伪随机位的来源,用于初始化新位的状态。
      返回:
      RandomGenerator.SplittableGenerator 对象流
      抛出:
      NullPointerException - 如果源为空
      自从:
      17
    • splits

      返回产生给定 streamSize 个新伪随机数生成器的流,每个生成器都实现 RandomGenerator.SplittableGenerator 接口。
      指定者:
      splits 在接口 RandomGenerator.SplittableGenerator
      实现要求:
      参数:
      streamSize - 要生成的值的数量
      source - 一个 RandomGenerator.SplittableGenerator 实例,用于代替这个实例作为伪随机位的来源,用于初始化新位的状态。
      返回:
      RandomGenerator.SplittableGenerator 对象流
      抛出:
      NullPointerException - 如果源为空
      IllegalArgumentException - 如果 streamSize 小于零
      自从:
      17
    • ints

      public IntStream  ints(long streamSize)
      返回一个流,该流产生给定的 streamSize 伪随机数 int 值,来自该生成器和/或从中分离出的一个值。
      指定者:
      ints 在接口 RandomGenerator
      参数:
      streamSize - 要生成的值的数量
      返回:
      伪随机 int 值流
      抛出:
      IllegalArgumentException - 如果 streamSize 小于零
    • ints

      public IntStream  ints()
      从该生成器和/或从中返回一个有效的无限伪随机 int 值流。
      指定者:
      ints 在接口 RandomGenerator
      实现注意事项:
      此方法的实现等效于 ints(Long.MAX_VALUE)
      返回:
      伪随机 int 值流
    • ints

      public IntStream  ints(long streamSize, int randomNumberOrigin, int randomNumberBound)
      返回一个流,该流产生给定的 streamSize 伪随机数 int 值,来自该生成器和/或从中分离出一个值;每个值都符合给定的起源(包括)和边界(不包括)。
      指定者:
      ints 在接口 RandomGenerator
      参数:
      streamSize - 要生成的值的数量
      randomNumberOrigin - 每个随机值的原点(含)
      randomNumberBound - 每个随机值的边界(不包括)
      返回:
      伪随机 int 值流,每个值都具有给定的原点(包括)和边界(不包括)
      抛出:
      IllegalArgumentException - 如果 streamSize 小于零,或者 randomNumberOrigin 大于或等于 randomNumberBound
    • ints

      public IntStream  ints(int randomNumberOrigin, int randomNumberBound)
      从这个生成器和/或从中返回一个有效的无限伪随机流 int 值;每个值都符合给定的起源(包括)和边界(不包括)。
      指定者:
      ints 在接口 RandomGenerator
      实现注意事项:
      此方法的实现等效于 ints(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound)
      参数:
      randomNumberOrigin - 每个随机值的原点(含)
      randomNumberBound - 每个随机值的边界(不包括)
      返回:
      伪随机 int 值流,每个值都具有给定的原点(包括)和边界(不包括)
      抛出:
      IllegalArgumentException - 如果 randomNumberOrigin 大于或等于 randomNumberBound
    • longs

      public LongStream  longs(long streamSize)
      返回一个流,该流产生给定的 streamSize 伪随机数 long 值,来自此生成器和/或从中分离出一个值。
      指定者:
      longs 在接口 RandomGenerator
      参数:
      streamSize - 要生成的值的数量
      返回:
      伪随机 long 值流
      抛出:
      IllegalArgumentException - 如果 streamSize 小于零
    • longs

      public LongStream  longs()
      从该生成器和/或从中返回一个有效的无限伪随机 long 值流。
      指定者:
      longs 在接口 RandomGenerator
      实现注意事项:
      此方法实现为等同于 longs(Long.MAX_VALUE)
      返回:
      伪随机 long 值流
    • longs

      public LongStream  longs(long streamSize, long randomNumberOrigin, long randomNumberBound)
      返回一个流,该流产生给定的 streamSize 伪随机数 long 值,来自该生成器和/或从中分离出一个值;每个值都符合给定的起源(包括)和边界(不包括)。
      指定者:
      longs 在接口 RandomGenerator
      参数:
      streamSize - 要生成的值的数量
      randomNumberOrigin - 每个随机值的原点(含)
      randomNumberBound - 每个随机值的边界(不包括)
      返回:
      伪随机 long 值流,每个值都具有给定的原点(包括)和边界(不包括)
      抛出:
      IllegalArgumentException - 如果 streamSize 小于零,或者 randomNumberOrigin 大于或等于 randomNumberBound
    • longs

      public LongStream  longs(long randomNumberOrigin, long randomNumberBound)
      从该生成器和/或从中返回一个有效的无限伪随机流 long 值;每个值都符合给定的起源(包括)和边界(不包括)。
      指定者:
      longs 在接口 RandomGenerator
      实现注意事项:
      此方法实现为等同于 longs(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound)
      参数:
      randomNumberOrigin - 每个随机值的原点(含)
      randomNumberBound - 每个随机值的边界(不包括)
      返回:
      伪随机 long 值流,每个值都具有给定的原点(包括)和边界(不包括)
      抛出:
      IllegalArgumentException - 如果 randomNumberOrigin 大于或等于 randomNumberBound
    • doubles

      public DoubleStream  doubles(long streamSize)
      返回一个流,该流产生给定的 streamSize 伪随机数 double 值,来自该生成器和/或从中分离出一个值;每个值都在零(含)和一(不含)之间。
      指定者:
      doubles 在接口 RandomGenerator
      参数:
      streamSize - 要生成的值的数量
      返回:
      double 值流
      抛出:
      IllegalArgumentException - 如果 streamSize 小于零
    • doubles

      public DoubleStream  doubles()
      从该生成器和/或从中返回一个有效的无限伪随机 double 值流;每个值都在零(含)和一(不含)之间。
      指定者:
      doubles 在接口 RandomGenerator
      实现注意事项:
      此方法实现为等同于 doubles(Long.MAX_VALUE)
      返回:
      伪随机 double 值流
    • doubles

      public DoubleStream  doubles(long streamSize, double randomNumberOrigin, double randomNumberBound)
      返回一个流,该流产生给定的 streamSize 伪随机数 double 值,来自该生成器和/或从中分离出一个值;每个值都符合给定的起源(包括)和边界(不包括)。
      指定者:
      doubles 在接口 RandomGenerator
      参数:
      streamSize - 要生成的值的数量
      randomNumberOrigin - 每个随机值的原点(含)
      randomNumberBound - 每个随机值的边界(不包括)
      返回:
      伪随机 double 值流,每个值都具有给定的原点(包括)和边界(不包括)
      抛出:
      IllegalArgumentException - 如果 streamSize 小于零,或者 randomNumberOrigin 不是有限的,或者 randomNumberBound 不是有限的,或者 randomNumberOrigin 大于或等于 randomNumberBound
    • doubles

      public DoubleStream  doubles(double randomNumberOrigin, double randomNumberBound)
      从该生成器和/或从中返回一个有效的无限伪随机 double 值流;每个值都符合给定的起源(包括)和边界(不包括)。
      指定者:
      doubles 在接口 RandomGenerator
      实现注意事项:
      此方法的实现等效于 doubles(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound)
      参数:
      randomNumberOrigin - 每个随机值的原点(含)
      randomNumberBound - 每个随机值的边界(不包括)
      返回:
      伪随机 double 值流,每个值都具有给定的原点(包括)和边界(不包括)
      抛出:
      IllegalArgumentException - 如果 randomNumberOrigin 不是有限的,或者 randomNumberBound 不是有限的,或者 randomNumberOrigin 大于或等于 randomNumberBound