唯一的随机整数发生器
如果你有一个足够小的范围可能的数字,那么这是非常简单而有用的:
final List<Integer> sack = new ArrayList<>(RANGE);
for (int i = 0; i < RANGE; i++) sack.add(i);
Collections.shuffle(sack);
现在随便拉出来的物品的sack
。
...它是最聪明的答案...谢谢.. – user2375278 2013-05-13 09:58:41
一个简单的算法将是:
- 创建
HashSet<Integer> set
- 生成随机数=>使用该随机数
- 如果不存在于
set
并将其存储在set
- 如果存在在
set
中,返回步骤2
N注意由于唯一性约束,数字不会是真正的随机数。
这只是建议您不打算耗尽因为随着未使用的数字变得不足,性能会显着降低。 – 2013-05-13 09:46:24
@MarkoTopolnik确实如此。 – assylias 2013-05-13 09:47:04
如果你正在寻找的是全球唯一的,你可能要考虑在整个世界
import java.util.UUID;
public class Test {
public static void main(String[] args) {
System.out.println(UUID.randomUUID());
}
}
这是Java的UUID类产生,将只创建一次,曾经的ID,标识,然而,字母数字不是一个整数
咋...那有点极端...我只想约80个号码... – user2375278 2013-05-13 09:51:08
@ user2375278大声笑,够公平的。你现在看到为什么我想要确切知道你的意思是什么独特的 – 2013-05-13 09:53:24
有没有像唯一的整数随机的东西。
你被限制在最好的情况下数字2到64的女巫的力量是相当大的数字。
唯一值的问题是您需要什么。他们必须是唯一的单一应用程序运行或他们必须保持独特的整个应用程序的生活?
所以你会有一堆方法来创建一个随机数字发生器。 UUID是一个选项,但assyliasaproach也很好,Fisher-Yates shuffle
也是很好的例子。
对于这个集合,你可以添加类似的东西。
- 创建将在其N个整为了容器
- 。
- 将容器中的物品洗干净。
- 阅读元素按顺序组成。
如果你有选择的容器中的列表,你可以使用 Collections.shuffle()
我做的洗牌,但你应该表现出你已经真正尝试的东西... – 2013-05-13 09:43:10
@MitchWheat不唯一性意味着它赢得了”你真的是随机的吗? – Thihara 2013-05-13 09:44:24
你是什么意思的独特的,全球独一无二的,或者只是一旦你亲自创建它,你不想让别人相同 – 2013-05-13 09:45:17