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)对您的数组进行混洗.

你可能感兴趣的:(java,random算法)