Module java.base
Package java.util.random

Class RandomGeneratorFactory<T extends RandomGenerator>

java.lang.Object
java.util.random.RandomGeneratorFactory<T>
类型参数:
T - 创建随机生成器的类型

public final class RandomGeneratorFactory<T extends RandomGenerator> extends Object
这是一个用于生成特定 算法 的多个随机数生成器的工厂类。 RandomGeneratorFactory 还提供了选择随机数生成器算法的方法。可以使用 of(String) 方法来定位特定的 算法 需要的 RandomGeneratorFactory。方法 all() 生成一个非空的 Stream,其中包含所有可用的 RandomGeneratorFactory,可以搜索以定位适合任务的 RandomGeneratorFactory。有三种方法用于构建 RandomGenerator 实例,取决于所需的初始种子类型。 create(long) 用于长种子构建,create(byte[]) 用于 byte[] 种子构建,create() 用于随机种子构建。示例;
   RandomGeneratorFactory<RandomGenerator> factory = RandomGeneratorFactory.of("Random");

    for (int i = 0; i < 10; i++) {
        new Thread(() -> {
            RandomGenerator random = factory.create(100L);
            System.out.println(random.nextDouble());
        }).start();
    }
RandomGeneratorFactory 还提供了描述生成器属性(或属性)的方法,并可用于选择随机数生成器 算法。这些方法通常与 all() 一起使用。在此示例中,该代码定位生成具有最高状态位数的 RandomGeneratorFactory,该工厂生成 RandomGenerators
    RandomGeneratorFactory<RandomGenerator> best = RandomGeneratorFactory.all()
        .filter(rgf -> !rgf.name().equals("SecureRandom")) // SecureRandom has MAX_VALUE stateBits.
        .sorted(Comparator.comparingInt(RandomGeneratorFactory<RandomGenerator>::stateBits).reversed())
        .findFirst()
        .orElse(RandomGeneratorFactory.of("Random"));
    System.out.println(best.name() + " in " + best.group() + " was selected");

    RandomGenerator rng = best.create();
    System.out.println(rng.nextLong());
自 JDK 版本:
17
参见:
  • Method Details

    • of

      public static <T extends RandomGenerator> RandomGeneratorFactory<T> of(String name)
      返回一个 RandomGeneratorFactory,可以生成使用 name 算法RandomGenerator 实例。
      实现要求:
      RandomGeneratorFactory 使用服务提供程序 API 来确定 RandomGenerator 接口的实现的可用性。
      类型参数:
      T - 用于生成 RandomGenerator 的子接口
      参数:
      name - 随机数生成器 算法 的名称
      返回:
      RandomGeneratorFactory,生成 RandomGenerator
      抛出:
      NullPointerException - 如果名称为 null
      IllegalArgumentException - 如果未找到命名的算法
    • getDefault

      public static RandomGeneratorFactory<RandomGenerator> getDefault()
      返回一个 RandomGeneratorFactory,满足具有状态位大于或等于 64 的算法的最低要求。
      实现要求:
      由于算法会随时间改进,因此不能保证此方法随时间返回相同的算法。
      返回:
      一个 RandomGeneratorFactory
    • all

      返回一个非空的流,其中包含可用的 RandomGeneratorFactory(s)。不包括已标记为过时的 RandomGenerators。
      实现要求:
      RandomGeneratorFactory 使用服务提供程序 API 来确定 RandomGenerator 接口的实现的可用性。
      返回:
      一个包含所有可用的 RandomGeneratorFactory(s) 的非空流。
    • name

      public String name()
      返回随机数生成器使用的 算法 的名称。
      返回:
      算法 的名称。
    • group

      public String group()
      返回随机数生成器使用的 算法 的组名。
      返回:
      算法 的组名。
    • stateBits

      public int stateBits()
      返回 算法 用于维护种子状态的位数。
      返回:
      算法 用于维护种子状态的位数。
    • equidistribution

      public int equidistribution()
      返回 算法 的均匀分布。
      返回:
      算法 的均匀分布。
    • period

      public BigInteger period()
      返回随机数生成器使用的 算法 的周期。如果无法确定周期,则返回 BigInteger.ZERO。
      返回:
      BigInteger 周期。
    • isStatistical

      public boolean isStatistical()
      返回 true,如果随机生成器是使用算术 算法 计算的,并且在统计上是确定性的。
      返回:
      如果随机生成器是统计的,则返回true。
    • isStochastic

      public boolean isStochastic()
      如果随机生成器是使用外部或熵源作为输入计算的,则返回true。
      返回:
      如果随机生成器是随机的,则返回true。
    • isHardware

      public boolean isHardware()
      如果随机生成器使用硬件设备(HRNG)生成熵输入,则返回true。
      返回:
      如果随机生成器是由硬件生成的,则返回true。
    • isArbitrarilyJumpable

      public boolean isArbitrarilyJumpable()
      如果随机生成器可以跳转到状态周期中任意指定的远点,则返回true。
      返回:
      如果随机生成器是可以任意跳跃的,则返回true。
    • isJumpable

      public boolean isJumpable()
      如果随机生成器可以跳转到状态周期中指定的远点,则返回true。
      返回:
      如果随机生成器是可跳跃的,则返回true。
    • isLeapable

      public boolean isLeapable()
      如果随机生成器是可跳跃的,并且可以跳到状态周期中非常遥远的点,则返回true。
      返回:
      如果随机生成器是可跳跃的,则返回true。
    • isSplittable

      public boolean isSplittable()
      如果随机生成器可以克隆为具有相同属性但在状态周期中位置更远的单独对象,则返回true。
      返回:
      如果随机生成器是可分割的,则返回true。
    • isStreamable

      public boolean isStreamable()
      如果随机生成器可以用于创建随机数流Streams,则返回true。
      返回:
      如果随机生成器是可流式化的,则返回true。
    • isDeprecated

      public boolean isDeprecated()
      如果RandomGenerator(算法)的实现已被标记为弃用,则返回true。
      实现说明:
      随机数生成器算法随时间演变;新算法将被引入,旧算法将失去地位。如果认为旧算法不适合继续使用,则将其标记为弃用,以指示将来可能会删除它。
      返回:
      如果RandomGenerator(算法)的实现已被标记为弃用,则返回true。
    • create

      public T create()
      根据选择的算法创建一个RandomGenerator实例。
      返回:
      创建一个新的RandomGenerator实例。
    • create

      public T create(long seed)
      根据选择的算法和提供的起始长整型种子创建一个RandomGenerator实例。如果算法不支持长整型种子,则使用不带参数的create形式。
      参数:
      seed - 长整型随机种子值。
      返回:
      创建一个新的RandomGenerator实例。
    • create

      public T create(byte[] seed)
      根据选择的算法和提供的起始字节数组种子创建一个RandomGenerator实例。如果算法不支持字节数组种子,则使用不带参数的create形式。
      参数:
      seed - 字节数组随机种子值。
      返回:
      创建一个新的RandomGenerator实例。
      抛出:
      NullPointerException - 如果种子为null。