独特的随机整数生成器

时间:2013-05-13 09:42:17

标签: java random integer unique

我正在尝试制作一个产生唯一数字的随机整数生成器。

有没有人有任何想法怎么可能?

4 个答案:

答案 0 :(得分:4)

如果你的数字范围足够小,那么这非常简单实用:

final List<Integer> sack = new ArrayList<>(RANGE);
for (int i = 0; i < RANGE; i++) sack.add(i);
Collections.shuffle(sack);

现在只需按顺序从sack中提取项目。

答案 1 :(得分:1)

一个简单的算法是:

  1. 创建HashSet<Integer> set
  2. 生成随机数
  3. 如果set =&gt;中不存在使用该随机数并将其存储在set
  4. 如果出现在set中,请返回第2步
  5. 请注意,由于唯一性约束,这些数字不会是真正随机的。

答案 2 :(得分:1)

如果您正在寻找的是全局唯一标识符,您可能需要考虑java的UUID类,该类生成的ID只会在整个世界中创建一次

import java.util.UUID;

public class Test {
    public static void main(String[] args) {

        System.out.println(UUID.randomUUID());
    }
}

但是,字母数字不是整数

答案 3 :(得分:0)

没有像独特的整数随机这样的东西。

你被限制在最好的情况下,数字2到64的力量是相当大的数字。

唯一值的问题在于您需要什么。它们必须是单一应用程序运行的独特之处,还是它们必须在整个应用程序中保持独特性?

所以你将有很多方法来创建一个随机数生成器。 UUID是一个选项,但assyliasaproach也很好Fisher-Yates shuffle就是很好的例子。

对于此系列,您可以添加类似的内容。

  1. 创建容器
  2. 按顺序输入整数。
  3. 随机播放容器中的物品。
  4. 按顺序读取元素。
  5. 如果您选择了List作为容器,则可以使用 Collections.shuffle()

    对其进行随机播放