我正在尝试制作一个生成唯一数字的随机整数生成器。
有谁知道这怎么可能?
如果您的可能数字范围足够小,那么这非常简单且有用:
final List<Integer> sack = new ArrayList<>(RANGE);
for (int i = 0; i < RANGE; i++) sack.add(i);
Collections.shuffle(sack);
sack
现在只需按顺序拉出物品。
一种简单的算法是:
HashSet<Integer> set
set
=> 中,则使用该随机数并将其存储在set
set
,返回步骤 2请注意,由于唯一性约束,这些数字不会是真正随机的。
如果您要查找的是全局唯一标识符,您可能需要考虑 java 的 UUID 类,该类生成的 ID 只会在全世界创建一次
import java.util.UUID;
public class Test {
public static void main(String[] args) {
System.out.println(UUID.randomUUID());
}
}
但是,它是字母数字而不是整数
没有像唯一整数随机这样的东西。
在最好的情况下,你被限制在 2 到 64 女巫的幂是相当大的数字。
唯一值的问题在于您需要它们。它们对于单个应用程序运行是否必须是唯一的,还是必须在整个应用程序生命周期内保持唯一?
因此,您将有很多方法来创建随机数生成器。UUID 是一个选项,但 assyliasaproach 也很好,也是Fisher-Yates shuffle
一个很好的例子。
您可以在此集合中添加类似的内容。
如果您选择了一个列表作为容器,您可以使用Collections.shuffle()对其进行洗牌