在 java 中生成随机数的最佳种子数是多少?

What's the best seed number for generating random numbers in java?

我需要在 java 中生成相当随机的数字,但不希望每次我的方法调用时都出现重复的结果。考虑这段代码:

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

那么最好使用什么种子?

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

  • 随着时间的推移而变化,因此您不会在任何地方硬编码常量..
  • 你不需要任何外部库依赖
  • 静态调用,无需创建对象

尝试这样的事情

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

Random 空构造函数不使用当前报价作为默认种子吗?至少那是 C# 所做的。如果是这样,空的构造函数和任何构造函数一样好。 Java 的文档只说 "This constructor sets the seed of the random number generator to a value very likely to be distinct from any other invocation of this constructor."

编辑:这是我发现的:

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

虽然你不能保证随机性。它是伪随机的,有人可能会根据以前的值计算出未来的值。如果安全不是主要问题,您可以只使用 new Random()。除非你使用不当,比如在循环中初始化它,否则它应该没问题。