常用类-java.util.Random
-
public class Random extends Object implements Serializable
-
该类的实例用于生成伪随机数的流。 该类使用48位种子,其使用线性同余公式进行修改。
-
如果使用相同的种子创建两个Random
Random
,并且对每个实例进行相同的方法调用序列,则它们将生成并返回相同的数字序列。 -
java.util.Random的
java.util.Random
是线程安全的。 但是,跨线程的同时使用java.util.Random
实例可能会遇到争用,从而导致性能下降。 在多线程设计中考虑使用ThreadLocalRandom
。 -
java.util.Random的
java.util.Random
不是加密安全的。 考虑使用SecureRandom
获取一个加密安全的伪随机数生成器,供安全敏感应用程序使用。
构造方法:
-
-
Constructor and Description Random()
创建一个新的随机数生成器。Random(long seed)
使用单个long
种子创建一个新的随机数生成器。
-
实验:设置随机数种子的作用
@Test
public void test002() {
long seed = 123;
Random random = new Random(seed);
int i1 = random.nextInt();//随机产生一个int类型的值
int i2 = random.nextInt();
int i3 = random.nextInt();
System.out.println(i1);
System.out.println(i2);
System.out.println(i3);
System.out.println("==============================");
Random random1 = new Random();
random1.setSeed(seed);
int j1 = random.nextInt();
int j2 = random.nextInt();
int j3 = random.nextInt();
System.out.println(j1);
System.out.println(j2);
System.out.println(j3);
}
第一次运行结果:
-1188957731
1018954901
-39088943
==============================
1295249578
1087885590
-1829099982
第二次运行结果:
-1188957731
1018954901
-39088943
==============================
1295249578
1087885590
-1829099982
结果:给Random对象设置了随机数种子可以使得这个对象多次运行时产生的随机数固定,但是同一对象一次运行中多次调用方法还是随机的。
常用方法:
-
-
boolean
nextBoolean()
返回下一个伪随机数,从这个随机数发生器的序列中均匀分布boolean
值。void
nextBytes(byte[] bytes)
生成随机字节并将它们放入用户提供的字节数组中。double
nextDouble()
返回下一个伪随机数,从这个随机数发生器的序列中0.0
和1.0
之间的double
值0.0
分布。float
nextFloat()
返回下一个伪随机数,从这个随机数发生器的序列中0.0
和1.0
之间的float
值0.0
分布。double
nextGaussian()
从该随机数发生器的序列返回下一个伪随机数,高斯(“正”)分布double
值,平均值为0.0
,标准差为1.0
。int
nextInt()
返回下一个伪随机数,从这个随机数发生器的序列中均匀分布int
值。int
nextInt(int bound)
返回伪随机的,均匀分布int
值介于0(含)和指定值(不包括),从该随机数生成器的序列绘制。long
nextLong()
返回下一个伪,均匀分布long
从这个随机数生成器的序列值。void
setSeed(long seed)
使用单个long
种子设置该随机数生成器的种子。
-
扩展:Random产生的随机数都是等概率的
验证:
@Test
public void test003() {
Random random = new Random();
int[] arr = new int[5];//每个元素的值代表出现随机数为下标的次数
//例如:1出现的次数为100次,那么a[1] = 100
int ran = 0;
for (int i = 0; i < 1000000; i++) {
ran = random.nextInt(5);//随机产生0-4的整数
arr[ran]+=1;
}
for (int i = 0; i < 5; i++) {
System.out.println(i + "出现的概率:" + (double)arr[i]/1000000);
}
}