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

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

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

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

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

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

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

在这种情况下,请将它们存储在“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)); } 

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] 

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