浅析Math.random与Random随机数生成

随机数生成

Math.random()方法

返回大于或等于0.0且小于1.0的带有正号的双精度值。返回值的选择是伪随机的,在这个范围内(近似)均匀分布。
当这个方法第一次被调用时,它会创建一个newpseudorandom-number生成器,就像通过表达式一样
—JavaAPI文档

  • 返回一个大于或等于0.0且小于1.0的double类型。
  • 随机范围呈现均匀分布

Random随机数生成器

该类的一个实例用于生成伪随机数字流。这个类使用48位种子,使用线性同余公式对其进行修改。(见Donald Knuth,《计算机编程的艺术》,第2卷,第3.2.1节)。
如果使用相同的seed创建了两个Random实例,并且为每个实例执行相同的方法调用序列,则它们将生成和返回相同的数字序列。为了保证这个特性,对类随机指定了特定的算法。为了Java代码的绝对可移植性,Java实现必须为Random类使用这里显示的所有算法。然而,随机类的子类允许使用其他算法,只要它们遵守所有方法的一般约定。
此方法被正确地同步以允许多个线程正确地使用。但是,如果许多线程需要以很高的速度生成伪随机数,那么每个线程拥有自己的伪随机数生成器可能会减少争用。
—JavaAPI文档

  • Random类有多个方法可返回多种类型的随机数
    • nextInt()方法

      • 无参数:返回一个Int数值范围内的整数(-2147483648~2147483647)
      • 带参数:返回一个从 0~指定参数 区间内的Int类型随机数,参数必须为 正的整数类型
    • nextDouble()方法

      和Math.random()方法类似,随机返回一个0~1之间的double类型数

    • nextFloat()方法

      随机返回一个0~1之间的float类型数

    • nextLong()方法

      随机返回一个long数值范围内的整数

    • nextBoolean()方法

      随机返回一个bool类型值

  • 无参与有参创建Random对象时的区别
    • 无参创建Random对象
      无参创建Random对象时使用 系统时钟 作为种子生成伪随机数。
      多次运行中生成的随机数是不同的(系统当前时钟发生变化)
    • 有参创建Random对象
      指定固定的数值作为种子生成伪随机数。
      多次运行中生成的随机数是一样的(种子未变)
  • Random生成随机数是线程安全的

总结

  • 使用Random类来生成随机数功能更加具体且强大。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值