70 lines
2.5 KiB
Markdown
70 lines
2.5 KiB
Markdown
下面是 Java 中 `java.util.Random` 类的简要介绍及几种最常用的用法示例。
|
||
|
||
------
|
||
|
||
## 1. 基本概念
|
||
|
||
- `Random` 是伪随机数生成器,内部用线性同余法(LCG)产生序列。
|
||
- 如果不传 seed,默认以当前时间作为种子;传入相同 seed 会得到相同的“随机”序列,方便测试。
|
||
|
||
```java
|
||
import java.util.Random;
|
||
|
||
Random rnd1 = new Random(); // 随机种子
|
||
Random rnd2 = new Random(12345L); // 固定种子 -> 每次结果相同
|
||
```
|
||
|
||
------
|
||
|
||
## 2. 常用方法
|
||
|
||
| 方法 | 功能 | 返回值范围 |
|
||
| ---------------- | ----------------------- | ----------------------------------------- |
|
||
| `nextInt()` | 任意 int | `Integer.MIN_VALUE` … `Integer.MAX_VALUE` |
|
||
| `nextInt(bound)` | 0(含)至 bound(不含) | `[0, bound)` |
|
||
| `nextLong()` | 任意 long | 整个 long 范围 |
|
||
| `nextDouble()` | double 小数 | `[0.0, 1.0)` |
|
||
| `nextBoolean()` | 布尔值 | `true` 或 `false` |
|
||
| `nextGaussian()` | 高斯(正态)分布 | 均值 0、标准差 1 |
|
||
|
||
------
|
||
|
||
## 3. 示例代码
|
||
|
||
```java
|
||
import java.util.Random;
|
||
import java.util.stream.IntStream;
|
||
|
||
public class RandomDemo {
|
||
public static void main(String[] args) {
|
||
Random rnd = new Random(); // 随机种子
|
||
Random seeded = new Random(2025L); // 固定种子
|
||
|
||
// 1) 随机整数
|
||
int a = rnd.nextInt(); // 任意 int
|
||
int b = rnd.nextInt(100); // [0,100)
|
||
System.out.println("a=" + a + ", b=" + b);
|
||
|
||
// 2) 随机浮点数与布尔
|
||
double d = rnd.nextDouble(); // [0.0,1.0)
|
||
boolean flag = rnd.nextBoolean();
|
||
System.out.println("d=" + d + ", flag=" + flag);
|
||
|
||
// 3) 高斯分布
|
||
double g = rnd.nextGaussian(); // 均值0,σ=1
|
||
System.out.println("gaussian=" + g);
|
||
|
||
// 4) 生成一组随机数流
|
||
IntStream stream = rnd.ints(5, 50, 60); // 5 个 [50,60) 的随机 ints
|
||
System.out.print("stream: ");
|
||
stream.forEach(n -> System.out.print(n + " "));
|
||
}
|
||
}
|
||
```
|
||
|
||
------
|
||
|
||
## 4. 小贴士
|
||
|
||
- 并发环境下可用 `ThreadLocalRandom.current()`,避免多线程竞争。
|
||
- 若只需加密强度随机数,请使用 `SecureRandom`。 |