new Random()vs new Random(long seed)

时间:2015-03-09 01:41:46

标签: java

有什么区别?我很欣赏C ++的不同之处,因为不更改种子会在重新运行时生成相同的数字集。但是,在Java中似乎并非如此,其中生成的随机数在程序的不同运行中是不同的。那么,为什么有人甚至会使用第二个版本,即new Random(long seed)

2 个答案:

答案 0 :(得分:0)

设置种子时,您可以预测(并重现)PRNG的输出,

Random r = new Random(1L);
System.out.println(r.nextInt(100));
System.out.println(r.nextInt(100));
System.out.println(r.nextInt(100));
r = new Random(1L);
System.out.println(r.nextInt(100));
System.out.println(r.nextInt(100));
System.out.println(r.nextInt(100));

在我的系统上输出

85,88,47

然后

85,88,47

因为种子已重置 1 。请注意,SecureRandom具有您描述的行为。

答案 1 :(得分:0)

new Random()创建一个新的Random个实例,very likely different,但不能保证来自Random创建的任何其他实例。

new Random(long seed)创建一个新Random实例,该initialize the random number generator实例将pseudorandom number generator,从而确保具有相同种子的两个Random实例将生成相同的序列。< / p>

由于Random只是{{3}},因此将它用于需要真正随机数生成器的应用程序是不明智的。但是,对于不需要它的应用程序,或者对于想要预测价值的PRNG用户来说,这并不是一个糟糕的选择。