Java随机
Java Random类用于生成一系列随机数。
Java随机类
随机类是java.util包的一部分。
java Random类的一个实例用于生成随机数。
此类提供了几种生成整数,双精度,长整型,浮点型等随机数的方法。
随机数生成算法对种子值起作用。
如果未提供,则从系统纳米时间创建种子值。如果两个随机实例具有相同的种子值,则它们将生成相同的随机数序列。
Java Random类是线程安全的,但是在多线程环境中,建议使用
java.util.concurrent.ThreadLocalRandom类。随机类实例不适合对安全敏感的应用程序,在这种情况下最好使用
java.security.SecureRandom。
Java随机构造函数
Java Random类具有两个构造函数,如下所示:
Random():创建新的随机数生成器Random(long seed):使用指定的种子创建新的随机数生成器
Java随机类方法
让我们看一下Java Random类的一些方法。
nextBoolean():该方法返回下一个伪随机数,它是来自随机数生成器序列的布尔值。nextDouble():该方法返回下一个伪随机数,它是介于0.0和1.0之间的双精度值。nextFloat():该方法返回下一个伪随机数,该伪随机数是介于0.0和1.0之间的float值。nextInt():此方法从随机数生成器序列返回下一个int值。nextInt(int n):此方法返回一个伪随机数,它是介于0和随机数生成器序列中指定值之间的int值。
Java随机示例
让我们看一下下面的Java Random示例程序。
package com.theitroad.examples;
import java.util.Random;
/**
* Java Random Number Example Program
*
*/
public class RandomNumberExample {
public static void main(String[] args) {
//initialize random number generator
Random random = new Random();
//generates boolean value
System.out.println(random.nextBoolean());
//generates double value
System.out.println(random.nextDouble());
//generates float value
System.out.println(random.nextFloat());
//generates int value
System.out.println(random.nextInt());
//generates int value within specific limit
System.out.println(random.nextInt(20));
}
}
上面程序的输出是:
false 0.30986869120562854 0.6210066 -1348425743 18
查看此帖子以获取有关Java Radom Number Generation的更多信息。
使用种子生成随机数
我们可以通过两种方式使用种子生成随机数。
Random random = new Random(long seed);
Random random1 = new Random();
random1.setSeed(seed);
种子是通过方法next(int)维护的伪随机数生成器内部状态的初始值。
package com.theitroad.examples;
import java.util.Random;
/**
* Java Random Number Using Seed Example Program
*
* @author hyman
*
*/
public class RadomSeedExample {
public static void main(String[] args) {
//using constructor
Random random = new Random(100);
System.out.println("Using Constructor");
System.out.println(random.nextInt());
//using method
Random random2 = new Random();
random2.setSeed(200);
System.out.println("Using Method");
System.out.println(random2.nextInt());
}
}
上面程序的输出是:
Using Constructor -1193959466 Using Method -1133938638
如果我们将同一种子传递给两个不同的随机数生成器怎么办?
让我们看一下下面的程序,看看如果我们将相同的种子传递给两个不同的随机数生成器,会发生什么情况。
package com.theitroad.examples;
import java.util.Random;
/**
* Java Random Number Using Same Seed Example Program
*
*/
public class RandomNumberSameSeedExample {
public static void main(String[] args) {
//initialize two random number generators using same seed
Random random1 = new Random(100);
Random random2 = new Random(100);
System.out.println(random1.nextInt());
System.out.println(random2.nextInt());
}
}
上面程序的输出是:
-1193959466 -1193959466
我们可以看到,如果我们将相同的种子传递给两个不同的随机数生成器,它将生成相同的随机数。
Java 8随机类方法
从上图可以看到,Java 8中向Random类添加了许多新方法。
这些方法可以产生随机数流。
下面是一个简单的程序,用于生成1到100之间的5个整数的流。
package com.theitroad.random;
import java.util.Random;
import java.util.stream.IntStream;
public class JavaRandomExample {
public static void main(String[] args) {
Random random = new Random();
//generate stream of 5 ints between 1 to 100
IntStream ints = random.ints(5, 1, 100);
ints.forEach(System.out::println);
}
}

