模块  java.base
软件包  java.util

Class SplittableRandom


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

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

    从以下版本开始:
    1.8
    • 构造方法摘要

      构造方法  
      构造器 描述
      SplittableRandom()
      创建一个新的SplittableRandom实例,该实例可能生成统计上独立于当前程序中任何其他实例的值的序列; 并且可能并且通常确实在程序调用之间变化。
      SplittableRandom​(long seed)
      使用指定的初始种子创建新的SplittableRandom实例。
    • 方法摘要

      所有方法  实例方法 具体的方法 
      变量和类型 方法 描述
      DoubleStream doubles()
      从此生成器返回一个有效无限的伪随机值double和/或从它生成一个分割; 每个值介于零(包括)和一(不包括)之间。
      DoubleStream doubles​(double randomNumberOrigin, double randomNumberBound)
      从该生成器返回一个有效无限的伪随机double流和/或从它生成的一个分裂; 每个值符合给定的原点(包括)和绑定(不包括)。
      DoubleStream doubles​(long streamSize)
      返回一个流,该流从该生成器生成给定的streamSize个伪随机double值和/或从中生成一个分裂; 每个值介于零(包括)和一(不包括)之间。
      DoubleStream doubles​(long streamSize, double randomNumberOrigin, double randomNumberBound)
      返回一个流,该流从该生成器生成给定的streamSize个伪随机数double值和/或从中生成一个分裂; 每个值符合给定的原点(包括)和绑定(不包括)。
      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()
      从此生成器返回一个有效无限的伪随机 long流和/或从中生成一个分裂的值。
      LongStream longs​(long streamSize)
      返回一个流,该流从此生成器生成给定的 streamSize个伪随机数 long值和/或从中生成一个分裂。
      LongStream longs​(long randomNumberOrigin, long randomNumberBound)
      从该生成器返回一个有效无限的伪随机long值流和/或从它生成一个分裂; 每个值符合给定的原点(包括)和绑定(不包括)。
      LongStream longs​(long streamSize, long randomNumberOrigin, long randomNumberBound)
      返回一个流,该流从该生成器生成给定的streamSize个伪随机long值和/或从中生成一个分裂; 每个值符合给定的原点(包括)和绑定(不包括)。
      boolean nextBoolean()
      返回伪随机数 boolean
      void nextBytes​(byte[] bytes)
      使用生成的伪随机字节填充用户提供的字节数组。
      double nextDouble()
      返回零(包括)和一(不包括)之间的伪随机数 double
      double nextDouble​(double bound)
      返回0.0(包括)和指定边界(不包括)之间的伪随机数 double
      double nextDouble​(double origin, double bound)
      返回指定原点(包括)和bound(不包括)之间的伪随机值 double
      int nextInt()
      返回伪随机数 int
      int nextInt​(int bound)
      返回零(包括)和指定边界(不包括)之间的伪随机数 int
      int nextInt​(int origin, int bound)
      返回指定原点(包括)与指定边界(不包括)之间的伪随机数 int
      long nextLong()
      返回伪随机数 long
      long nextLong​(long bound)
      返回零(包括)和指定边界(不包括)之间的伪随机数 long
      long nextLong​(long origin, long bound)
      返回指定原点(包括)与指定边界(不包括)之间的伪随机数 long
      SplittableRandom split()
      构造并返回一个新的SplittableRandom实例,该实例与该实例不共享可变状态。
    • 构造方法详细信息

      • SplittableRandom

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

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

      • split

        public SplittableRandom split()
        构造并返回一个新的SplittableRandom实例,该实例与该实例不共享可变状态。 但是,具有非常高的概率,由两个对象共同生成的值集具有相同的统计属性,就好像单个线程使用单个SplittableRandom对象生成相同数量的值一样。 可以使用split()方法进一步分割两个对象中的任一个或两个,并且相同的预期统计属性适用于由这种递归分割构造的整个生成器集。
        结果
        新的SplittableRandom实例
      • nextBytes

        public void nextBytes​(byte[] bytes)
        使用生成的伪随机字节填充用户提供的字节数组。
        参数
        bytes - 用伪随机字节填充的字节数组
        异常
        NullPointerException - 如果bytes为null
        从以下版本开始:
        10
      • nextInt

        public int nextInt()
        返回伪随机数 int
        结果
        伪随机数 int
      • nextInt

        public int nextInt​(int bound)
        返回零(包括)和指定边界(不包括)之间的伪随机数 int
        参数
        bound - 上限(不包括)。 必须是积极的。
        结果
        伪随机数 int在零(包括)和绑定(不包括)之间的值
        异常
        IllegalArgumentException - 如果 bound不是正面的
      • nextInt

        public int nextInt​(int origin,
                           int bound)
        返回指定原点(包括)与指定边界(不包括)之间的伪随机数 int
        参数
        origin - 返回的值最小
        bound - 上限(独家)
        结果
        原始(包括)和绑定(独占)之间的伪随机数 int
        异常
        IllegalArgumentException - 如果 origin大于或等于 bound
      • nextLong

        public long nextLong()
        返回伪随机数 long
        结果
        伪随机值 long
      • nextLong

        public long nextLong​(long bound)
        返回零(包括)和指定边界(不包括)之间的伪随机数 long
        参数
        bound - 上限(不包括)。 必须是积极的。
        结果
        伪随机数 long在零(包括)和绑定(不包括)之间的值
        异常
        IllegalArgumentException - 如果 bound不是正数
      • nextLong

        public long nextLong​(long origin,
                             long bound)
        返回指定原点(包括)与指定边界(不包括)之间的伪随机数 long
        参数
        origin - 返回的值最小
        bound - 上限(独占)
        结果
        原始(包括)和绑定(不包括)之间的伪随机数 long
        异常
        IllegalArgumentException - 如果 origin大于或等于 bound
      • nextDouble

        public double nextDouble()
        返回零(包括)和一(不包括)之间的伪随机数 double
        结果
        伪随机数 double在零(包括)和一(不包括)之间的值
      • nextDouble

        public double nextDouble​(double bound)
        返回介于0.0(含)和指定边界(不包括)之间的伪随机数 double
        参数
        bound - 上限(不包括)。 必须是积极的。
        结果
        伪随机数 double在零(包括)和绑定(不包括)之间的值
        异常
        IllegalArgumentException - 如果 bound不是正数
      • nextDouble

        public double nextDouble​(double origin,
                                 double bound)
        返回指定原点(包括)和bound(不包括)之间的伪随机值 double
        参数
        origin - 返回的值最小
        bound - 上限(独家)
        结果
        原始(包括)和绑定(不包括)之间的伪随机数 double
        异常
        IllegalArgumentException - 如果 origin大于或等于 bound
      • nextBoolean

        public boolean nextBoolean()
        返回伪随机数 boolean
        结果
        伪随机数 boolean
      • ints

        public IntStream ints​(long streamSize)
        返回一个流,该流从此生成器生成给定的 streamSize个伪随机 int值和/或从中生成一个分裂。
        参数
        streamSize - 要生成的值的数量
        结果
        伪随机数值流 int
        异常
        IllegalArgumentException - 如果 streamSize小于零
      • ints

        public IntStream ints()
        从此生成器返回一个有效无限的伪随机 int值流和/或从中生成一个分裂。
        Implementation Note:
        实现此方法等同于 ints(Long.MAX_VALUE)
        结果
        伪随机数值流 int
      • ints

        public IntStream ints​(long streamSize,
                              int randomNumberOrigin,
                              int randomNumberBound)
        返回一个流,该流从该生成器生成给定的streamSize个伪随机int值和/或从中生成一个分裂; 每个值符合给定的原点(包括)和绑定(不包括)。
        参数
        streamSize - 要生成的值的数量
        randomNumberOrigin - 每个随机值的原点(包括)
        randomNumberBound - 每个随机值的绑定(不包括)
        结果
        一个伪随机值 int值,每个值都有给定的原点(包括)和绑定(不包括)
        异常
        IllegalArgumentException - 如果 streamSize小于零,或者 randomNumberOrigin大于或等于 randomNumberBound
      • ints

        public IntStream ints​(int randomNumberOrigin,
                              int randomNumberBound)
        从此生成器返回一个实际上无限制的伪随机int值流和/或从中生成一个分裂; 每个值符合给定的原点(包括)和绑定(不包括)。
        Implementation Note:
        实现此方法等同于 ints(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound)
        参数
        randomNumberOrigin - 每个随机值的原点(包括)
        randomNumberBound - 每个随机值的绑定(不包括)
        结果
        伪随机 int值的流,每个值具有给定的原点(包括)和绑定(不包括)
        异常
        IllegalArgumentException - 如果 randomNumberOrigin大于或等于 randomNumberBound
      • longs

        public LongStream longs​(long streamSize)
        返回一个流,该流从此生成器生成给定的 streamSize个伪随机数 long值和/或从中生成一个分裂。
        参数
        streamSize - 要生成的值的数量
        结果
        伪随机数 long的流
        异常
        IllegalArgumentException - 如果 streamSize小于零
      • longs

        public LongStream longs()
        从此生成器返回一个实际上无限制的伪随机值 long和/或从它生成一个分割。
        Implementation Note:
        实现此方法等同于 longs(Long.MAX_VALUE)
        结果
        伪随机值 long的流
      • longs

        public LongStream longs​(long streamSize,
                                long randomNumberOrigin,
                                long randomNumberBound)
        返回一个流,该流从该生成器生成给定的streamSize个伪随机long值和/或从中生成一个分裂; 每个值符合给定的原点(包括)和绑定(不包括)。
        参数
        streamSize - 要生成的值的数量
        randomNumberOrigin - 每个随机值的原点(包括)
        randomNumberBound - 每个随机值的绑定(不包括)
        结果
        一个伪随机数 long值的流,每个值都有给定的原点(包括)和绑定(不包括)
        异常
        IllegalArgumentException - 如果 streamSize小于零,或者 randomNumberOrigin大于或等于 randomNumberBound
      • longs

        public LongStream longs​(long randomNumberOrigin,
                                long randomNumberBound)
        从该生成器返回一个有效无限的伪随机long流和/或从它生成的一个分裂; 每个值符合给定的原点(包括)和绑定(不包括)。
        Implementation Note:
        实现此方法等同于 longs(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound)
        参数
        randomNumberOrigin - 每个随机值的原点(包括)
        randomNumberBound - 每个随机值的绑定(不包括)
        结果
        伪随机 long值的流,每个值都具有给定的原点(包括)和绑定(不包括)
        异常
        IllegalArgumentException - 如果 randomNumberOrigin大于或等于 randomNumberBound
      • doubles

        public DoubleStream doubles​(long streamSize)
        返回一个流,该流从该生成器生成给定的streamSize个伪随机double值和/或从中生成一个分裂; 每个值介于零(包括)和一(不包括)之间。
        参数
        streamSize - 要生成的值的数量
        结果
        double值的流
        异常
        IllegalArgumentException - 如果 streamSize小于零
      • doubles

        public DoubleStream doubles()
        从该生成器返回一个有效无限的伪随机double流和/或从它生成的一个分裂; 每个值介于零(包括)和一(不包括)之间。
        Implementation Note:
        实现此方法等同于 doubles(Long.MAX_VALUE)
        结果
        一组伪随机值 double
      • doubles

        public DoubleStream doubles​(long streamSize,
                                    double randomNumberOrigin,
                                    double randomNumberBound)
        返回产生所述给定流streamSize数的伪随机的double从该发电机和/或从它一个分割值; 每个值符合给定的原点(包括)和绑定(不包括)。
        参数
        streamSize - 要生成的值的数量
        randomNumberOrigin - 每个随机值的原点(包括)
        randomNumberBound - 每个随机值的绑定(不包括)
        结果
        伪随机 double值的流,每个值具有给定的原点(包括)和绑定(不包括)
        异常
        IllegalArgumentException - 如果 streamSize小于零,或者 randomNumberOrigin大于或等于 randomNumberBound
      • doubles

        public DoubleStream doubles​(double randomNumberOrigin,
                                    double randomNumberBound)
        从此生成器返回一个有效无限的伪随机值double和/或从它生成一个分割; 每个值符合给定的原点(包括)和绑定(不包括)。
        Implementation Note:
        实现此方法等同于 doubles(Long.MAX_VALUE, randomNumberOrigin, randomNumberBound)
        参数
        randomNumberOrigin - 每个随机值的原点(包括)
        randomNumberBound - 每个随机值的边界(不包括)
        结果
        伪随机 double值的流,每个值具有给定的原点(包括)和绑定(不包括)
        异常
        IllegalArgumentException - 如果 randomNumberOrigin大于或等于 randomNumberBound