Module java.base
Package java.util

Class 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。)这些测试仅验证某些类型和范围的方法,但预计其他类型的方法也至少近似具有相似的属性。生成的值系列的周期(在重复之前生成的任何值系列的长度)为264
  • 方法split()构造并返回一个与当前实例不共享可变状态的新SplittableRandom实例。然而,极高的概率是,两个对象共同生成的值集合具有与单个线程使用单个SplittableRandom对象生成相同数量的值时相同的统计属性。
  • SplittableRandom的实例是线程安全的。它们被设计为在线程之间分割,而不是共享。例如,使用随机数的fork/join-style计算可能包括以下形式的构造:new Subtask(aSplittableRandom.split()).fork()
  • 该类提供了用于在stream.parallel()模式下使用时采用上述技术的生成随机流的附加方法。

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

自Java版本:
1.8
  • Constructor Details

    • SplittableRandom

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

      public SplittableRandom()
      创建一个新的SplittableRandom实例,该实例可能生成与当前程序中任何其他实例的值统计独立的值序列;并且可能在程序调用之间变化,通常会变化。
  • Method Details

    • split

      public SplittableRandom split()
      构造并返回一个与此实例不共享可变状态的新SplittableRandom实例。然而,极高的概率是,两个对象共同生成的值集合具有与单个线程使用单个SplittableRandom对象生成相同数量的值时相同的统计属性。两个对象中的任何一个或两个对象都可以使用split()方法进一步分割,并且这种递归分割构造的所有生成器集合都具有相同的预期统计属性。
      指定者:
      split 在接口 RandomGenerator.SplittableGenerator
      返回:
      新的SplittableRandom实例
    • split

      返回一个新的从此生成器分割出来的伪随机数生成器,实现了RandomGeneratorRandomGenerator.SplittableGenerator接口。
      指定者:
      split 在接口 RandomGenerator.SplittableGenerator
      参数:
      source - 一个RandomGenerator.SplittableGenerator实例,用于初始化新实例状态的伪随机位的源。
      返回:
      一个实现了RandomGeneratorRandomGenerator.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

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

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

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

      返回一个有效无限的新伪随机数生成器流,每个流实现 RandomGenerator.SplittableGenerator 接口。
      指定者:
      splits 在接口 RandomGenerator.SplittableGenerator
      实现要求:
      参数:
      source - 一个 RandomGenerator.SplittableGenerator 实例,用于作为初始化新状态的伪随机位的源,而不是此实例。
      返回值:
      一个流的 RandomGenerator.SplittableGenerator 对象
      抛出:
      NullPointerException - 如果源为null
      自版本:
      17
    • splits

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

      public IntStream ints(long 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)
      返回一个流,生成给定数量的伪随机 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)
      返回一个流,生成给定数量的伪随机 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)
      返回一个流,生成给定数量的伪随机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)
      返回一个流,生成给定数量的伪随机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)
      返回一个流,生成给定数量的伪随机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