Java new Random()vs new Random(长种子)

Java new Random()vs new Random(长种子),java,Java,有什么区别?我很欣赏C++的差异,因为不改变种子会在重新运行时产生相同的数字集。然而,Java中的情况似乎并非如此,在不同的程序运行中生成的随机数是不同的。那么,为什么有人会使用第二个版本,即新随机(长种子)?当你设置种子时,你可以预测(并再现)PRNG的输出 Random r = new Random(1L); System.out.println(r.nextInt(100)); System.out.println(r.nextInt(100)); System.out.println(r

有什么区别?我很欣赏C++的差异,因为不改变种子会在重新运行时产生相同的数字集。然而,Java中的情况似乎并非如此,在不同的程序运行中生成的随机数是不同的。那么,为什么有人会使用第二个版本,即
新随机(长种子)

当你设置种子时,你可以预测(并再现)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。请注意,它具有您描述的行为。

new Random()

new Random(long seed)
创建一个新的
Random
实例,该实例将处于该值,从而确保具有相同种子的两个
Random
实例将生成相同的序列


由于
Random
只是一个函数,因此在需要真正随机数生成器的应用程序中使用它是不明智的。然而,对于不需要它的应用程序,或者对于使用PRNG的人来说,他们希望预测周围的值,这不是一个糟糕的选择。

我想如果你想要相同的随机集,会使用它吗?或者如果你想提供你自己独特的种子?我通常用<代码> CurrimeTimeMys[](/Cord:>)来问你的区别是什么,或者你问为什么会有人使用<代码>新的随机(long)< /> >,因为你知道它和代码>新的随机()/Cube >之间的区别?你的意思是C++的反向?比如如果你播种,你会得到相同的随机数集?让我查一查。@yshavit:两者都有,最好是后者。为什么会有人使用第二种方法?@MattClark:你说得对!所以,这是C++的反面,EWOWAH等等…我一点都不懂。请解释一下(如果是第一种情况,因为这三个数字有相同的种子,它们不应该是相同的吗?种子生成序列,而不是每个单独的数字。更改种子将生成不同的序列,相同的种子将生成相同的序列。那么,建议什么才具有真正的随机功能?
SecureRandom
是一个fine选择。