Java常用类库-Random类

Random的实例用于生成伪随机数。其在 java.util 包下,前几节的类都在 java.lang 包下,因此我们在创建 Random 对象时需要在类名上面导入包名( import java.util.Random )。
Random使用线性同余公式修正的48位种子。只有使用相同种子创建、并且执行相同的方法调用序列的两个随机实例,才能生成并返回相同的数字序列。
*** Random* 类** 实现的算法使用一个受保护的使用方法,每次调用可以提供多达32位伪随机生成数。
注: java.util.Random 的实例在密码学上不安全。对于敏感的应用程序,应该考虑使用 SecureRandom 类来获取加密安全的随机数生成器。

1. 构造函数

/*
* Random() 无参构造器
*/
Random random = new Random();
/*
* Random(long seed) 带长整型参数的构造器
*/
long seed = 45687;
Random randomBySeed = new Random(seed);

2. 方法概述

  • 设置随机数种子值
/*
* 使用长整型(long)种子设置此随机数的种子值。
* 其将种子值更新为(种子^0x5DEECE66DL) & ((1L << 48) - 1)
*       并清除nextGaussian()使用的haveNextNextGaussian标志。
*/
Random r = new Random();
r.setSeed(89999);
System.out.println(r.nextInt());
  • 生成下一个伪随机数
/*
* 生成[0,10]区间的整数。
*     由于next(int bits)是 protected (相对其他类是私有类,相对子类或姐妹类是公共的),因此其他类需要根据数据类型调用相关方法。
*      nextBytes(byte[] bytes)
*      nextInt() & nextInt(int bound)
*      nextLong()
*      nextBoolean()
*      nextFloat()
*      nextDouble()
*/
Random random = new Random();
System.out.println(random.nextInt(10));

3. 与Math类中的random()方法的区别

  • Math.Random() 返回带正号的double值,其值大于0.0,小于1.0。Math.Random() 是同步的,允许多个线程同时使用。
  • java.util.Random 类生成随机数时,首先创建该类的实例对象。如果调用无参构造器,Java编辑器以系统当前时间作为随机数的种子值,因为每时每刻的时间不相同,所以产生的随机数也不同。但不排除运行速度过快,导致两次随机数相同的几率。也可以在实例化时自定义种子值,如果种子值相同,则随机数也完全相同。

你可能感兴趣的:(Java常用类库-Random类)