目录

  • Random
    • 基础使用
    • 优缺点分析
  • SecureRandom
    • 基础使用
  • 总结:
  • 持续更新

Random

Random 类诞生于 JDK 1.0,它产生的随机数是伪随机数,也就是有规则的随机数。Random 使用的随机算法为 linear congruential pseudorandom number generator (LGC) 线性同余法伪随机数。在随机数生成时,随机算法的起源数字称为种子数(seed),在种子数的基础上进行一定的变换,从而产生需要的随机数字。

Random 对象在种子数相同的情况下,相同次数生成的随机数是相同的。比如两个种子数相同的 Random 对象,第一次生成的随机数字完全相同,第二次生成的随机数字也完全相同。默认情况下 new Random() 使用的是当前纳秒时间作为种子数的

基础使用

使用 Random 生成一个从 0 到 10 的随机数(不包含 10),实现代码如下:

// 生成 Random 对象
Random random = new Random();
for (int i = 0; i < 10; i++) {// 生成 0-9 随机整数int number = random.nextInt(10);System.out.println("生成随机数:" + number);
}

优缺点分析

Random 使用 LGC 算法生成伪随机数的优点是执行效率比较高,生成的速度比较快。

它的缺点是如果 Random 的随机种子一样的话,每次生成的随机数都是可预测的(都是一样的)。如下代码所示,当我们给两个线程设置相同的种子数的时候,会发现每次产生的随机数也是相同的:

// 创建两个线程
for (int i = 0; i < 2; i++) {new Thread(() -> {// 创建 Random 对象,设置相同的种子Random random = new Random(1024);// 生成 3 次随机数for (int j = 0; j < 3; j++) {// 生成随机数int number = random.nextInt();// 打印生成的随机数System.out.println(Thread.currentThread().getName() + ":" +number);// 休眠 200 mstry {Thread.sleep(200);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("---------------------");}}).start();
}

SecureRandom

SecureRandom 继承自 Random,该类提供加密强随机数生成器。SecureRandom 不同于 Random,它收集了一些随机事件,比如鼠标点击,键盘点击等,SecureRandom 使用这些随机事件作为种子。这意味着,种子是不可预测的,而不像 Random 默认使用系统当前时间的毫秒数作为种子,从而避免了生成相同随机数的可能性。

基础使用

// 创建 SecureRandom 对象,并设置加密算法
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
for (int i = 0; i < 10; i++) {// 生成 0-9 随机整数int number = random.nextInt(10);// 打印结果System.out.println("生成随机数:" + number);
}

总结:

对于绝大数应用场景来说,使用 Random 已经足够了。当在竞争比较激烈的场景下可以使用 ThreadLocalRandom 来替代 Random,但如果对安全性要求比较高的情况下,可以使用 SecureRandom 来生成随机数,因为 SecureRandom 会收集一些随机事件来作为随机种子,所以 SecureRandom 可以看作是生成真正随机数的一个工具类。

持续更新

更新:2022年10月5日

Java生成随机数的方式相关推荐

  1. Java生成随机数的4种方式,以后就用它了!

    作者 | 王磊 来源 | Java中文社群(ID:javacn666) 转载请联系授权(微信ID:GG_Stone) 在 Java 中,生成随机数的场景有很多,所以本文我们就来盘点一下 4 种生成随机 ...

  2. Java生成随机数的几种高级用法

    转载自 进阶 | Java生成随机数的几种高级用法! 言归正传,众所周知,随机数是任何一种编程语言最基本的特征之一.而生成随机数的基本方式也是相同的:产生一个0到1之间的随机数.看似简单,但有时我们也 ...

  3. java 生成随机数_Java 生成随机数的 N 种方法

    原标题:Java 生成随机数的 N 种方法 www.baeldung.com/java-generating-random-numbers 1.引言 本文将探讨用 Java 生成随机数的不同方法. 2 ...

  4. Java 生成随机数的 N 种方法

    (给ImportNew加星标,提高Java技能) 编译:ImportNew/覃佑桦 www.baeldung.com/java-generating-random-numbers 1.引言 本文将探讨 ...

  5. java 生成随机数_不会生成随机数?我们来看看java生成随机数的10种方法

    1.引言 本文将探讨用 Java 生成随机数的不同方法. 2.Java API Java API 提供了几种随机数生成方法.让我们一起来了解一下. 2.1.java.lang.Math Math 类中 ...

  6. Java生成随机数原理_Java中随机数的产生方式与原理详解

    Java中随机数的产生方式与原理 查阅随机数相关资料,特做整理 首先说一下java中产生随机数的几种方式 在j2se中我们可以使用Math.random()方法来产生一个随机数,这个产生的随机数是0- ...

  7. java生成随机数的方法_Java获取随机数的3种方法

    随机数在实际中使用很广泛,比如要随即生成一个固定长度的字符串.数字.或者随即生成一个不定长度的数字.或者进行一个模拟的随机选择等等.Java提供了最基本的工具,可以帮助开发者来实现这一切. 一.Jav ...

  8. java生成随机数random_Java获取随机数Random

    随机数在实际中使用很广泛,比如要随即生成一个固定长度的字符串.数字.或者随即生成一个不定长度的数字.或者进行一个模拟的随机选择等等.Java提供了最基本的工具,可以帮助开发者来实现这一切. 一.Jav ...

  9. java随机生成1到33数组,JAVA 生成随机数数组

    一.JAVA获取随机数的方法 //使用java.lang.Math类的random()方法 double a = Math.random(); System.out.println("0.0 ...

最新文章

  1. 你负责选歌,索尼负责用 AI 谱出风格相似的曲子
  2. SP11469 SUBSET - Balanced Cow Subsets(折半搜索+状态压缩)难度⭐⭐⭐⭐★
  3. NPOI导入导出EXCEL通用类,可直接使用在WinForm项目中
  4. linux注册函数机制,Linux可信计算机制模块详细分析之函数实现机制(1)字符设备驱动...
  5. QoE驱动的端到端视频直播技术演进
  6. vim 强制保存只读文件
  7. 基于JAVA+Servlet+JSP+MYSQL的人力资源管理系统
  8. vue移动端点击事件延迟_去除点击事件300ms延迟 (使用了vue之后)
  9. C++11 多线程线程共享数据
  10. css 3 制作水波状进度条
  11. 管理感悟:如何改造代码
  12. 应用Composite模式
  13. PCB绘图不小心把绘图界面缩小到看不见了,如何操作?
  14. 简述人工智能的发展历程图_人工智能发展简史
  15. 缺少tlqcu_qcu1.conf文件
  16. abb机器人编程指令goto指令_abb机器人编程指令——轨迹偏移使用的指令以及moveL指令...
  17. android手机导入iphone,安卓手机文件怎么传到苹果手机
  18. ROS新建工作空间及编译
  19. 2022-10-11 myql-exists子查询外表关联记录
  20. php 逻辑思维题,倘若3分钟内,你能答对这道智力题,说明你的逻辑思维能力很强...

热门文章

  1. 6行Python 用邮编找地址(邮编——>省、市、区)
  2. android实现大文件断点上传
  3. JAVA服务器下载文件内容为空
  4. dwd明细粒度事实层设计
  5. 【智能合约实战】——入门级DAPP,没有想象中那么难
  6. 存储介质还是存储载体,这不是个问题
  7. 电信感知测试软件,智能算法在电信业务用户体验感知分析中的应用
  8. IDEA插件Free Mybatis plugin
  9. [转] 菜鸟手脱VMP,附上脱壳过程和自己写的脚本,可跨平台
  10. 使用 robotstudio 创建自己的工具