总结:Java 17 新特性 - 增强的伪随机数生成器

本文是对官方文档(https://openjdk.org/jeps/356)的概括总结,更详细的内容请看官方文档的不完全翻译https://blog.csdn.net/weixin_38833041/article/details/125464143

简介

为伪随机数生成器 (PRNG) 提供新的接口类型和实现,包括可跳转的 PRNG 和另一类可拆分的 PRNG 算法 (LXM)。

新特点

提供了一个新接口 RandomGenerator

它为所有现有的和新的 PRNG 提供了一个统一的 API。 RandomGenerators 提供名为 ints、longs、doubles、nextBoolean、nextInt、nextLong、nextDouble 和 nextFloat 的方法,以及它们当前的所有参数的变化。从而更容易在应用程序中互换使用各种 PRNG 算法。例如:

static void testRandomGenerator (RandomGenerator randomGenerator){
        IntStream ints = randomGenerator.ints(50,0,10);
        int[] randoms = ints.toArray();
        for (int i:randoms) {
            System.out.println(i);
        }
        System.out.println("random count = "+randoms.length);
}
public static void main(String[] args) {
        testRandomGenerator(new Random());
        testRandomGenerator(new SplittableRandom());
        testRandomGenerator(ThreadLocalRandom.current());
}

提供了一个新类 RandomGeneratorFactory

它用于定位和构造 RandomGenerator 实现的实例。

static void testRandomGeneratorFactory(String randomGeneratorName){
        RandomGeneratorFactory<RandomGenerator> factory = RandomGeneratorFactory.of(randomGeneratorName);
        RandomGenerator generator = factory.create();
        testRandomGenerator(generator);
}
public static void main(String[] args) {
        testRandomGeneratorFactory("Random");
        testRandomGeneratorFactory("L128X128MixRandom");
        testRandomGeneratorFactory("Xoshiro256PlusPlus");
}

上述方法还支持如下LXM 系列 PRNG 算法:

  • L32X64MixRandom
  • L32X64StarStarRandom
  • L64X128MixRandom
  • L64X128StarStarRandom
  • L64X256MixRandom
  • L64X1024MixRandom
  • L128X128MixRandom
  • L128X256MixRandom
  • L128X1024MixRandom

以及广泛使用的 PRNG 算法

  • Xoshiro256PlusPlus
  • Xoroshiro128PlusPlus

提供了四个新的专用 RandomGenerator 接口

  • SplittableRandomGenerator 扩展了 RandomGenerator 并且还提供
    名为 split 和 splits 的方法。 可拆分性允许用户从现有的 RandomGenerator 生成一个新的 RandomGenerator,这通常会产生统计上独立的结果。
  • JumpableRandomGenerator 扩展了RandomGenerator 并且还提供
    名为 jump 和 jumps 的方法。 可跳跃性允许用户跳到中等数量的抽签。
  • LeapableRandomGenerator 扩展了 RandomGenerator 并且还提供
    方法名为leap和leaps的方法。 可跳跃性允许用户跳过大量的抽签。
  • ArbitrarilyJumpableRandomGenerator 扩展了 LeapableRandomGenerator 并且还提供了jump 和 jumps 的方法额外的变体,允许指定任意跳跃距离。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值