赞
踩
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);
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。