Java随机数的5种获得方法(非常详细!)

 更新时间:2023年10月26日 10:30:22   作者:诺莲爸爸  
这篇文章主要给大家介绍了关于Java随机数的5种获得方法,在实际开发中产生随机数的使用是很普遍的,所以在程序中进行产生随机数操作很重要,文中通过图文介绍的非常详细,需要的朋友可以参考下

1. Math.random() 静态方法

产生的随机数是 0 - 1 之间的一个 double,即 0 <= random < 1

代码:

结果:

当调用 Math.random() 方法时,自动创建了一个伪随机数生成器,实际上用的是 new java.util.Random()。当接下来继续调用 Math.random() 方法时,就会使用这个新的伪随机数生成器

2. java.util.Random 工具类

基本算法:

linear congruential pseudorandom number generator (LGC) 线性同余法伪随机数生成器

缺点:可预测

Random类默认使用当前系统时钟作为种子:

Random类提供的方法:API

  • nextBoolean() - 返回均匀分布的 true 或者 false
  • nextBytes(byte[] bytes)
  • nextDouble() - 返回 0.0 到 1.0 之间的均匀分布的 double
  • nextFloat() - 返回 0.0 到 1.0 之间的均匀分布的 float
  • nextGaussian()- 返回 0.0 到 1.0 之间的高斯分布(即正态分布)的 double
  • nextInt() - 返回均匀分布的 int
  • nextInt(int n) - 返回 0 到 n 之间的均匀分布的 int (包括 0,不包括 n)
  • nextLong() - 返回均匀分布的 long
  • setSeed(long seed) - 设置种子

只要种子一样,产生的随机数也一样: 因为种子确定,随机数算法也确定,因此输出是确定的!

3. java.util.concurrent.ThreadLocalRandom 工具类

ThreadLocalRandom 是 JDK 7 之后提供,也是继承至 java.util.Random。每一个线程有一个独立的随机数生成器,用于并发产生随机数,能够解决多个线程发生的竞争争夺。效率更高!

ThreadLocalRandom 不是直接用 new 实例化,而是第一次使用其静态方法 current() 得到 ThreadLocal<ThreadLocalRandom> 实例,然后调用 java.util.Random 类提供的方法获得各种随机数。

4. java.Security.SecureRandom

也是继承至 java.util.Random。

SecureRandom 提供加密的强随机数生成器 (RNG),要求种子必须是不可预知的,产生非确定性输出。SecureRandom 也提供了与实现无关的算法,因此,调用方(应用程序代码)会请求特定的 RNG 算法并将它传回到该算法的 SecureRandom 对象中。

  1. 如果仅指定算法名称,如下所示:SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
  2. 如果既指定了算法名称又指定了包提供程序,如下所示:SecureRandom random = SecureRandom.getInstance("SHA1PRNG", "SUN");

5. 随机字符串

RandomStringUtils 类的实现上也是依赖了 java.util.Random 工具类:

总结

到此这篇关于Java随机数的5种获得方法的文章就介绍到这了,更多相关Java生成随机数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JAVA得到数组中最大值和最小值的简单实例

    JAVA得到数组中最大值和最小值的简单实例

    这篇文章主要介绍了JAVA得到数组中最大值和最小值的简单实例,需要的朋友可以参考下
    2014-08-08
  • java使用电脑摄像头识别二维码

    java使用电脑摄像头识别二维码

    这篇文章主要为大家详细介绍了java使用电脑摄像头识别二维码,从摄像头获取图像,再根据图片解析出二维码信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-10-10
  • Java消息队列的简单实现代码

    Java消息队列的简单实现代码

    本篇文章主要介绍了Java消息队列的简单实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • java 通过聚合查询实现elasticsearch的group by后的数量

    java 通过聚合查询实现elasticsearch的group by后的数量

    这篇文章主要介绍了java 通过聚合查询实现elasticsearch的group by后的数量,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • Java泛型extends关键字设置边界的实现

    Java泛型extends关键字设置边界的实现

    这篇文章主要介绍了Java泛型extends关键字设置边界的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • IDEA创建web项目出现404错误解决方法

    IDEA创建web项目出现404错误解决方法

    今天先来搭建一个web工程,工程搭建好运行时发现404,本文主要介绍了IDEA创建web项目出现404错误解决方法,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • Servlet的线程安全问题

    Servlet的线程安全问题

    本文主要介绍了Servlet的线程安全问题,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • 一文搞懂Spring Security异常处理机制

    一文搞懂Spring Security异常处理机制

    这篇文章主要为大家详细介绍一下Spring Security异常处理机制,文中的示例代码讲解详细,对我们学习Spring Security有一定帮助,感兴趣的可以学习一下
    2022-07-07
  • Java中的数组使用详解及练习

    Java中的数组使用详解及练习

    数组是Java程序中最常见的一种数据结构,它能够将相同类型的数据用一个标识符封装到一起,构成一个对象序列或基本数据类型,这篇文章主要给大家介绍了关于Java中数组使用详解及练习的相关资料,需要的朋友可以参考下
    2024-03-03
  • Windows系统下Java连接SQL Server的方法简介

    Windows系统下Java连接SQL Server的方法简介

    这篇文章主要介绍了Windows系统下Java连接SQL Server的方法,分别是JDBC和JTDS的相关使用,需要的朋友可以参考下
    2015-09-09

最新评论