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

    技术2022-07-17  108

    随机数生成

    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类来生成随机数功能更加具体且强大。
    Processed: 0.013, SQL: 9