JDK8在线Api中文手册java
Random类是伪随机数生成器。之因此称为伪随机数(pseudorandom),是由于它们只是简单的均匀分布序列。Random类定义了如下构造函数:api
Random() Random(long seed)
使用第1个版本建立的随机数生成器使用相对惟一的种子。第2个版本容许手动指定种子。
若是使用种子初始化Random对象,就为随机序列定义了开始点。若是使用相同的种子初始化另一个Random对象,就将会获得相同的随机序列。若是但愿生成不一样的序列,须要指定不一样的种子。实现这种效果的一种方式是使用当前时间做为Random对象的种子。这种方式减小了获得重复序列的可能。
表1列出了Random类定义的核心公有方法。这些方法在Random中已经存在了很长时间(不少自Java1.0以来就已提供),而且获得了普遍应用。oracle
方 法 | 描 述 |
---|---|
boolean nextBoolean() | 返回下一个布尔型随机数 |
void nextBytes(byte vals[]) | 使用随机产生的值填充vals |
double nextDouble() | 返回下一个double型随机数 |
float nextFloat() | 返回下一个float型随机数 |
double nextGaussian | 返回下一个高斯分布随机数 |
int nextInt() | 返回下一个int型随机数 |
int nextInt(int n) | 返回介于0和n之间的下一个int型随机数 |
long nextLong() | 返回下一个long型随机数 |
void setSeed(long newSeed) | 将种子(即随机数字生成器的开始点)设置为newSeed指定的值 |
能够看出,可以从Random对象抽取各类类型的随机数;经过调用nextBoolean()方法能够获得随机布尔值;经过调用nextBytes()方法能够获取随机字节;经过调用nextInt()方法能够抽取随机整数;经过调用nextLong()方法能够获取在整个取值范围均匀分布的长整型随机数。nextFloat()和nextDouble()方法分别返回在0.0到1.0之间均匀分布的float和double型随机数。最后,nextGaussian()方法返回均值为0.0,方差为1.0的标准高斯分布伪随机数,其类型为double,这就是注明的钟形曲线(bell curve)。
下面是一个例子,演示了由nextGaussian()方法产生的随机序列。该例首先获取100个随机高斯值并计算它们的平均值。该程序还以0.5为单位,分类统计落于正负两个标准误差范围内的值的个数,结果在屏幕的左侧以图形化的方式显示。dom
//Demonstrate random Gaussian values. import java.util.Random; class RandDemo { public static void main(String[] args) { Random r = new Random(); double val; double sum = 0; int bell[] = new int[10]; for (int i=0;i<100;i++){ val = r.nextGaussian(); sum+=val; double t=-2; for (int x=0;x<10;x++,t+=0.5){ if(val<t){ bell[x]++; break; } } } System.out.println("Average of values: "+(sum/100)); //display bell curve,sideways for (int i=0;i<10;i++){ for(int x=bell[i];x>0;x--){ System.out.print("*"); } System.out.println(); } /** * 输出:能够看出,获得了相似钟形分布的数字 * **** * ****** * ******* * **************** * ******************* * ****************** * ************* * ********** * *** * **** */ } }
JDK8向Random类添加了3个支持新的流API的方法:doubles()、ints()和longs()。它们都返回一个流,其中包含了指定类型的随机数的一个序列。每一个方法都定义了几种重载形式。下面列出了3个方法的最简单形式:ide
DoubleStream doubles() IntStream ints() LongStream longs()
doubles()方法返回的流包含了double类型的随机数(值的范围在0.0~1.0之间)。ints()方法返回的流包含了int类型的随机值。long()方法返回的流包含了long类型的随机值。对于这3个方法,返回的流其实是无穷的。它们有几种重载形式,容许指定流的大小、起点和上界。svg