小编典典

最简单的方法是创建一个可能数字的列表(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 order

Set generated = new LinkedHashSet();

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。

2020-02-25

java 产生无重复的随机数,Java创建无重复的随机数相关推荐

  1. java 生成不重复随机数_Java如何实现生成n个不重复的随机数 Java实现生成n个不重复的随机数代码...

    Java如何实现生成n个不重复的随机数?本篇文章小编给大家分享一下Java实现生成n个不重复的随机数代码,代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 需 ...

  2. java contains_Java基础教程|生成不重复随机数 java

    生成不重复随机数 java java生成随机数可以使用Math类中的方法.不随机可以使用List进行判断存储.(推荐教程:java教程 ) 1 . 调用java.lang下面Math类中的random ...

  3. java生成不重复随机数_生成不重复随机数 java

    生成不重复随机数 java java生成随机数可以使用Math类中的方法.不随机可以使用List进行判断存储.(推荐教程:java教程 ) 1 . 调用java.lang下面Math类中的random ...

  4. 1.7 Java创建对象详解(显式创建和隐含创建)

    对象是对类的实例化.对象具有状态和行为,变量用来表明对象的状态,方法表明对象所具有的行为.Java 对象的生命周期包括创建.使用和清除,本文详细介绍对象的创建,在 Java 语言中创建对象分显式创建与 ...

  5. python网络编程视频教程_Java网络开发视频教程 – 一站式学习Java网络编程视频教程 全面理解BIO(无密)...

    Java网络开发视频教程 – 一站式学习Java网络编程视频教程 全面理解BIO(无密) 全面理解BIO/NIO/AIO 网络层编程,是每一个开发者都要面对的技术.课程为解决大家学习网络层知识的难题, ...

  6. java 用流创建流_成为Java流大师–第1部分:创建流

    java 用流创建流 在许多情况下,声明性代码(例如,具有Streams的功能组合)提供了出色的代码指标. 通过该动手实验文章系列进行编码,并成为Java Streams的主教练,从而成为一名更好的J ...

  7. java如何避免注释重复_Java 8中的可重复注释

    java如何避免注释重复 使用Java 8,您可以对声明或类型重复相同的注释. 例如,要注册一个类仅应由特定角色在运行时访问,则可以编写如下内容: @Role("admin") @ ...

  8. 成为Java流大师–第1部分:创建流

    在许多情况下,声明性代码(例如,具有Streams的功能组合)可提供出色的代码指标. 通过本动手实验文章系列进行编码,并成为Java Streams的主教练,从而成为一名更好的Java程序员. Str ...

  9. Java 9示例–收集的工厂方法–创建不可修改的列表,集合和映射

    大家好,这是我在该博客上发表的有关Java 9功能的第一篇文章,今天您将了解我最喜欢的功能"收集的工厂方法" ,它是JEP 269的一部分.JEP代表JDK增强建议. 如果您曾经在 ...

  10. java无框架开发,DON: java 小型web项目快速开发框架,实现无配置,直接关注业务开发.主要解决请求分发解析...

    #DON框架介绍 ##目标 启动零配置快速进入开发 开发时,请求controller路由零配置 配合windfly.jar工具包快速开发 最终实现加入jar包即可快速开发 ##主要特点 无需配置请求u ...

最新文章

  1. 【LeetCode | 二叉树前、中、后序遍历{递归法}实现】
  2. Swift:在Safari中打开App
  3. 超全PHP学习资源整理:入门到进阶系列
  4. Ubuntu18.04如何让桌面软件默认root权限运行?
  5. 【大牛疯狂教学】深入拆解java虚拟机百度云
  6. 构建制品不一致,后续工作都是白费 | 研发效能提升36计
  7. python代码没有反应_没有任何编程经验者不要被Python简明手册误导。
  8. 创建对象属性赋值的内存理解
  9. nand flash 原理简介
  10. CodeBlocks使用静态链接库
  11. ios开发中如何隐藏各种bar
  12. 012-JDK可视化监控工具-jstack
  13. JAVA上百实例源码以及开源项目
  14. 程序员也要学英语——限定词、形容词和副词
  15. tiktok运营全攻略
  16. 判定两颗二叉树是否相同
  17. 网站PV、UV的含义
  18. 浏览器打开微信公众号h5页面,增加cookie绕过微信授权登录
  19. AppleParty(苹果派)v3 支持 App Store 新定价机制 - 批量配置自定价格和销售范围
  20. swagger 怎么去掉get delete_听我讲完GET、POST原理,面试官给我倒了杯卡布奇诺

热门文章

  1. 解决:按截图 ctrl+alt+a QQ聊天窗口就自动最小化(QQ以外的可以截图)
  2. 提高虚拟机运行速度方法
  3. new TypeToken<List>>(){}.getType() 是什么意思
  4. maven02-----Maven项目构建的初次使用
  5. UGLY NUMBERS II
  6. python学习笔记 - lambda 与 函数嵌套
  7. PyCharm光标变粗的解决办法
  8. apache.commons.lang.StringUtils 使用心得
  9. C#实现反射调用动态加载的DLL文件中的方法
  10. 预祝大家2011农历新年快乐,宏“兔”大展,心想事成~