Java 随机
Java Random 类用于生成一系列随机数。
Java 随机类
Random
类是 java.util 包的一部分。- java Random 类的实例用于生成随机数。
- 此类提供了几种方法来生成整数、双精度、长整型、浮点型等类型的随机数。
- 随机数生成算法基于种子值。若未提供,则从系统纳秒时间创建种子值。
- 如果两个 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 之间的浮点值。nextInt()
:此方法从随机数生成器序列返回下一个 int 值。- nextInt(int n):此方法返回一个伪随机数,即来自随机数生成器序列的 0 和指定值之间的 int 值。
Java 随机示例
让我们看一下下面的 java 随机示例程序。
package com.journaldev.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 随机数生成的更多信息。
使用种子生成随机数
我们可以通过两种方式使用种子来生成随机数。
Random random = new Random(long seed);
Random random1 = new Random();
random1.setSeed(seed);
种子是伪随机数生成器内部状态的初始值,由方法 next(int) 维护。
package com.journaldev.examples;
import java.util.Random;
/**
* Java Random Number Using Seed Example Program
*
* @author pankaj
*
*/
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.journaldev.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.journaldev.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);
}
}
这就是对 Java Random Class 的简要介绍。参考:API 文档