0

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

有谁知道这怎么可能?

4

4 回答 4

4

如果您的可能数字范围足够小,那么这非常简单且有用:

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

sack现在只需按顺序拉出物品。

于 2013-05-13T09:54:52.850 回答
1

一种简单的算法是:

  1. 创建一个HashSet<Integer> set
  2. 生成一个随机数
  3. 如果不存在于set=> 中,则使用该随机数并将其存储在set
  4. 如果存在set,返回步骤 2

请注意,由于唯一性约束,这些数字不会是真正随机的。

于 2013-05-13T09:44:00.970 回答
1

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

import java.util.UUID;

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

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

但是,它是字母数字而不是整数

于 2013-05-13T09:47:43.293 回答
0

没有像唯一整数随机这样的东西。

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

唯一值的问题在于您需要它们。它们对于单个应用程序运行是否必须是唯一的,还是必须在整个应用程序生命周期内保持唯一?

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

您可以在此集合中添加类似的内容。

  1. 创建一个容器
  2. 按顺序放入n个整数。
  3. 洗牌容器中的物品。
  4. 读取元素按顺序形成它。

如果您选择了一个列表作为容器,您可以使用Collections.shuffle()对其进行洗牌

于 2013-05-13T09:56:22.313 回答