java.lang.Object
java.util.random.RandomGeneratorFactory<T>
- 类型参数:
-
T
- 创建随机生成器的类型
这是一个用于生成特定 算法 的多个随机数生成器的工厂类。
RandomGeneratorFactory 还提供了描述生成器属性(或属性)的方法,并可用于选择随机数生成器 算法。这些方法通常与
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();
}
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 Summary
Modifier and TypeMethodDescriptionstatic Stream
<RandomGeneratorFactory<RandomGenerator>> all()
返回一个非空的流,其中包含可用的RandomGeneratorFactory(s)
。create()
基于所选的 算法 创建一个RandomGenerator
实例。create
(byte[] seed) 基于所选的 算法,提供一个起始的 byte[] 种子,创建一个RandomGenerator
实例。create
(long seed) 基于所选的 算法,提供一个起始的 long 种子,创建一个RandomGenerator
实例。int
返回 算法 的均匀分布。返回一个RandomGeneratorFactory
,满足具有状态位大于或等于 64 的算法的最低要求。group()
返回随机数生成器使用的 算法 的组名。boolean
如果随机生成器可以在状态周期中跳转到任意指定的距离点,则返回 true。boolean
如果 RandomGenerator 的实现(算法)已标记为过时,则返回 true。boolean
如果随机生成器使用硬件设备(HRNG)生成熵输入,则返回 true。boolean
如果随机生成器可以在状态周期中跳转到指定的距离点,则返回 true。boolean
如果随机生成器可以跳转并跳到状态周期中非常遥远的点,则返回 true。boolean
如果随机生成器可以克隆为具有相同属性但在状态周期中位置更远的单独对象,则返回 true。boolean
如果随机生成器是使用算术 算法 计算的,并且在统计上是确定性的,则返回 true。boolean
如果随机生成器是使用外部或熵源作为输入计算的,则返回 true。boolean
如果随机生成器可以用于创建随机数Streams
,则返回 true。name()
返回随机数生成器使用的 算法 的名称。static <T extends RandomGenerator>
RandomGeneratorFactory<T> period()
返回随机数生成器使用的 算法 的周期。int
返回 算法 用于维护种子状态的位数。
-
Method Details
-
of
- 实现要求:
- RandomGeneratorFactory 使用服务提供程序 API 来确定 RandomGenerator 接口的实现的可用性。
- 类型参数:
-
T
- 用于生成RandomGenerator
的子接口 - 参数:
-
name
- 随机数生成器 算法 的名称 - 返回:
-
RandomGeneratorFactory
,生成RandomGenerator
- 抛出:
-
NullPointerException
- 如果名称为 null -
IllegalArgumentException
- 如果未找到命名的算法
-
getDefault
返回一个RandomGeneratorFactory
,满足具有状态位大于或等于 64 的算法的最低要求。- 实现要求:
- 由于算法会随时间改进,因此不能保证此方法随时间返回相同的算法。
- 返回:
-
一个
RandomGeneratorFactory
-
all
返回一个非空的流,其中包含可用的RandomGeneratorFactory(s)
。不包括已标记为过时的 RandomGenerators。- 实现要求:
- RandomGeneratorFactory 使用服务提供程序 API 来确定 RandomGenerator 接口的实现的可用性。
- 返回:
-
一个包含所有可用的
RandomGeneratorFactory(s)
的非空流。
-
name
返回随机数生成器使用的 算法 的名称。- 返回:
- 算法 的名称。
-
group
返回随机数生成器使用的 算法 的组名。- 返回:
- 算法 的组名。
-
stateBits
public int stateBits()返回 算法 用于维护种子状态的位数。- 返回:
- 算法 用于维护种子状态的位数。
-
equidistribution
public int equidistribution()返回 算法 的均匀分布。- 返回:
- 算法 的均匀分布。
-
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
根据选择的算法创建一个RandomGenerator
实例。- 返回:
-
创建一个新的
RandomGenerator
实例。
-
create
根据选择的算法和提供的起始长整型种子创建一个RandomGenerator
实例。如果算法不支持长整型种子,则使用不带参数的create形式。- 参数:
-
seed
- 长整型随机种子值。 - 返回:
-
创建一个新的
RandomGenerator
实例。
-
create
根据选择的算法和提供的起始字节数组种子创建一个RandomGenerator
实例。如果算法不支持字节数组种子,则使用不带参数的create形式。- 参数:
-
seed
- 字节数组随机种子值。 - 返回:
-
创建一个新的
RandomGenerator
实例。 - 抛出:
-
NullPointerException
- 如果种子为null。
-