日常小结-java随机数类Random

Random类

首先java的Random采用48位的种子用linear congruential formula方法实现了一个生成随机数的类。

构造函数

Random类有两个构造函数。
一个是无参的,一个是以long为参数的。
这个long就是生成随机数的种子,当然这里需要区别一下,种子和生成随机数的范围为无关。

种子的意义

简单的说java生成的随机数实际上是伪随机数,也就是一个很大周期的循环,如果两个种子一样的话实际上相当于这两个循环是相同的。
可以人工的定义这个种子实际上是为了保障这一特性。使得相同种子生产的序列是相同的,此外需要额外注意的是这个参数long只用到低位的48位。如果需要用到所有64位数需要自己继承并修改构造函数。
当然调用setSeed可以改变种子。

生成随机数的常用方法

首先这个类有一个protect的next方法,所有的生成下一个随机数都是调用这个类的。
java设计的很合理,可以生成的随机数有boolean、bytes、double、float、gaussian(double类型的)、Int、long。
当然这里面除了int和boolean都是从0到1之间的。int是这个int范围的,boolean当然是false和true。

生成固定范围的int

nextInt提供了一种可以指定范围的的参数(int n),生成从0到n的之间的随机数

可替代的方案

当然有时候使用Math.random()静态方法或许是更好的一种方案。他会生成一个0到1之间的double数。
这个方法也是线程安全的,但是如果太频繁的竞争会导致

使用的其他注意事项

首先Document说Random是线程安全的类,但是同时使用Random会导致冲突和性能下降。
所有如果需要多线程大量的高频率的产生随机数,请使用ThreadLocalRandom,这个的源码有时间可以看看。

Random没有安全加密,如果有特殊的安全需要请使用SecureRandom。

这两个也是Random的子类。

继承Random

首先需要注意的是Random如果需要自己实现。
需要覆盖next方法。
并且实现Serializable。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值