栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java创建无重复的随机数

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java创建无重复的随机数

最简单的方法是创建一个可能数字的列表(1..20或任何数字),然后用对其进行混洗

Collections.shuffle
。然后,只需考虑你想要的许多元素。如果你的范围最终等于你需要的元素数量(例如,用于洗牌的卡片),则这非常好。

如果你想要(说)1..10,000范围内的10个随机元素,那么效果就不太好-你最终会不必要地进行大量工作。到那时,最好保留到目前为止已生成的一组值,并保持循环生成数字直到下一个不存在为止:

if (max < numbersNeeded){    throw new IllegalArgumentException("Can't ask for more numbers than are available");}Random rng = new Random(); // Ideally just create one instance globally// Note: use linkedHashSet to maintain insertion orderSet<Integer> generated = new linkedHashSet<Integer>();while (generated.size() < numbersNeeded){    Integer next = rng.nextInt(max) + 1;    // As we're adding to a set, this will automatically do a containment check    generated.add(next);}

但是,请谨慎选择设置-我非常有意地使用linkedHashSet它,因为它会保持插入顺序,我们在这里关心它。

另一种选择是通过每次减小范围并补偿现有值来始终取得进展。因此,举例来说,假设你要使用0..9范围内的3个值。在第一次迭代中,你将生成0..9范围内的任何数字-假设你生成了4。

在第二次迭代中,你将生成一个范围为0..8的数字。如果生成的数字小于4,则应保持原样…否则将其添加一个。这样得到的结果范围是0..9,而不是4。假设我们以这种方式得到7。

在第三次迭代中,你将生成一个范围为0..7的数字。如果生成的数字小于4,则将其保持原样。如果是4或5,则要加1。如果是6或7,则要加两个。这样,结果范围是0..9,没有4或6。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/379222.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号