生成唯一随机数列表

时间:2013-04-28 06:17:44

标签: java random numbers unique

所以,我有一个随机数生成器,它在1和任何用户输入之间生成10个数字作为最大值。它运作良好,但我想这样做它不会生成重复的数字。因此,如果它生成5,则其他数字都不能为5。

4 个答案:

答案 0 :(得分:3)

您可以尝试拒绝抽样。从空集开始。生成一个数字,如果它在集合中,请再试一次。也就是说继续挑选,直到找到不在集合中的数字。找到新号码后,将其添加到集合中,然后将其返回给用户。

当然如果生成了大量的数字,比如k,上限是n,那么得到一个新数字的时间遵循几何分布(成功概率(nk)/ n),所以预期找到唯一编号之前所需的采样数是n /(nk)。

答案 1 :(得分:3)

如果您的最大值较小,则可以使用Collection.shuffle()列出唯一值。从这里你可以选择10个元素。

答案 2 :(得分:0)

你不是第一个提出这个问题的人。有关一般答案,请参阅https://crypto.stackexchange.com/questions/1379/how-to-generate-a-list-of-unique-random-strings

答案 3 :(得分:0)

为了确保数字不重复,请将找到的数字存储在Java SET中,以便仅在内部没有重复时才添加。

随机生成算法可能类似于:

take the system time as your seed value 
use this to get the random numbers
suppose user says number between 1-100
so take system milliseconds%100 so time always  changes so maximum probability that you get random numbers.

因此,总是将种子值mod(%)作为上限,在本例中为100。