java random算法_java – math.random()遵循哪些算法

Java主要根据您的使用情况提供四个随机数生成器API.

java.lang.Math.random()

private static Random randomNumberGenerator;

private static synchronized void initRNG() {

if (randomNumberGenerator == null)

randomNumberGenerator = new Random();

}

public static double random() {

if (randomNumberGenerator == null) initRNG();

return randomNumberGenerator.nextDouble();

}

Math.random()只是调用Random Class的快捷方式.它比java.util.Random更简单,更不完整,但在某些情况下它已经足够了.

java.util.Random中

LCG是伪随机数生成的一个非常简单的公式. java.util.Random不是随机的,它是完全确定的.使用相同的初始条件(也称为种子),您可以按相同的顺序获得相同的结果.

使用java.util.Random适用于大多数用例(模拟,游戏……)但由于其可预测性而不适用于加密,因为这种用例更喜欢java.security.SecureRandom.

java.util.Random是线程安全的,但在多线程上下文中可能存在性能问题.如果您在多线程应用程序中工作,则更喜欢ThreadLocalRandom.

java.security.SecureRandom中

SecureRandom类扩展java.util.Random类,以基于熵源实现加密强随机数生成器. SecureRandom不具有确定性.

由于熵源,java.security.SecureRandom的速度比java.util.Random快.

java.util.concurrent.ThreadLocalRandom

ThreadLocalRandom类是Linear Congruential Generator的另一个实现,但是这个实现不是线程安全的,而是专用于特定线程.

在您的情况下,您可以使用java.util.Collections.shuffle(list)来使用java.util.Random或特定的随机生成器(如java.security.SecureRandom)对您的数组进行混洗.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值