Random.nextInt()生成的数字序列何时重复

时间:2013-03-03 21:11:38

标签: java random

有人知道Java的Random.nextInt()是否会在某个时间后重演?

具体而言,是否存在这样的数字n以使以下两个列表相等?

List<Integer> a = new LinkedList<>();
List<Integer> b = new LinkedList<>();

for (int i = 0; i < n; ++i)
   a.add(randObject.nextInt());

for (int i = n; i <= n * 2 ; ++i)
   b.add(randObject.nextInt());

是否保证每个随机对象都有一个句点? (注意:不同种子的物体不必具有相同的时期)

2 个答案:

答案 0 :(得分:4)

  

有人知道Java的Random.nextInt()会在一段时间后重演吗?

是的,它会。由于生成器具有有限的状态量,因此生成的序列具有有限的周期。

  

具体而言,n为什么以下两个列表相等?

没有指定,取决于Java实现。

  

是否保证每个随机对象总会有这样的n,无论它的种子是什么?

这段时间是有限的。但是,对于每个种子而言,情况并不一定如此。

答案 1 :(得分:-1)

如果你真的非常幸运,那么。否则没有。

但是来自 javadoc

  

nextInt的一般契约是伪随机生成并返回一个int值。所有2 ^ 32个可能的int值以(近似)相等的概率产生。