在Java中生成一组唯一的随机数

时间:2012-02-24 00:15:18

标签: java

我想在0-500范围内创建10个随机数。但问题是我希望这些数字是唯一的。对于2个随机数,我可以创建如下内容:

int randomItem1 = r.nextInt(500);
int randomItem2 = r.nextInt(500);
while(randomItem1==randomItem2){
    randomItem1=randomItem();
    randomItem2=randomItem();
}

但如果我这样做10,我认为它会堆叠。而且我这样说是因为我正在尝试创建一个巨大的算法,它试图进行连续的评估,我想要不断地获取10个随机和唯一的数字。我不知道该怎么办。有什么想法或建议吗?

4 个答案:

答案 0 :(得分:18)

看起来您将这些存储在各个变量中。存储此类项目组的“正常”位置通常位于列表或数组中。

在这种情况下,请将它们存储在“set”数据结构中。它不允许重复。

设置文档: http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Set.html

Set set = new HashSet();

while (set.size() < 10) {
    set.add(r.nextInt(500));
}

答案 1 :(得分:5)

Java Collections有一个shuffle方法。您可以将您的数字放入ArrayList,然后将其内容随机播放。如果ArrayList包含n个数字,则调用shuffle方法将为您提供包含n个数字但随机排列的相同ArrayList。

for(int i=0;i<10;i++){
list.add(i);  // list contains: [0,1,2,3,4,5,6,7,8,9]
}
Collections.shuffle(list);// list now contains: [0, 9, 3, 1, 5, 8, 7, 2, 6, 4]

答案 2 :(得分:3)

每次使用The Fisher-Yates shuffle使用数字时,从1-500中创建LinkedList个数字,然后将其中的一个数字随机播放。

这将为您提供保证的每个数字的理智(恒定时间)性能。

答案 3 :(得分:-1)

我会使用一个数组,并将数字存储在该数组中。你会生成一个新的随机数,然后需要迭代你的数组到你的数字计数,检查它是否与你之前创建的匹配。