什么是在java中生成随机数的最佳种子数?

时间:2016-03-13 10:46:47

标签: java random dynamically-generated random-seed

我需要在java中生成相当随机的数字,但是每次我的方法调用时都不需要重复的结果。请考虑以下代码:

Random rand = new Random(seed);
if (rand.nextBoolean())
     // do something...

那么什么是最好的种子?

3 个答案:

答案 0 :(得分:4)

Random空构造函数不使用当前刻度作为默认种子吗?至少那是C#的作用。如果是这样,空构造函数就像任何一样好。 Java的文档只说"这个构造函数将随机数生成器的种子设置为一个非常可能与此构造函数的任何其他调用不同的值。"

修改:以下是我发现的内容:

public Random() { this(++seedUniquifier + System.nanoTime()); }
private static volatile long seedUniquifier = 8682522807148012L;

但你不能保证随机性。它是伪随机的,有人可以根据以前的值找出未来的值。如果安全性不是主要问题,您可以使用new Random()。除非你不正确地使用它,比如在循环中初始化它,它应该做得很好。

答案 1 :(得分:2)

您可以随时尝试System.currentTimeMillis()

  • 随时间而变化,因此您不会在任何地方对常量进行硬编码。
  • 您不需要任何外部lib依赖
  • 是静态调用的,因此无需创建对象

答案 2 :(得分:2)

尝试这样的事情

Random rand = new Random(System.currentTimeMillis());
if (rand.nextBoolean())
 // do something...