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); } }